如何用另一个数组中找到的值的索引替换Python NumPy数组中的值?

InternetUser0947

我有一个n * m数组“ a”和另一个一维数组“ b”,例如:

a = array([[ 51, 30, 20, 10],
           [ 10, 32, 65, 77],
           [ 15, 20, 77, 30]])

b = array([10, 15, 20, 30, 32, 51, 65, 77])

我想用元素所在的相应索引“ b”替换“ a”中的所有元素。在上述情况下,我希望输出为:

a = array([[ 5, 3, 2, 0],
           [ 0, 4, 6, 7],
           [ 1, 2, 7, 3]])

请注意,在实际应用中,我的数组很大,超过3万个元素,其中有数千个。我已经尝试过for循环,但是这些计算需要很长时间。我还尝试了类似的迭代方法,并使用list.index()来获取索引,但这也花费了太多时间。

谁能帮助我先确定出现在“ b”中的“ a”元素的“ b”索引,然后构造更新的“ a”数组?

谢谢。

卢威

仅因为评论太长而将其发布为答案。它支持上面发布的orlp的解决方案。Numpy的向量化避免了显式循环,但这显然不是最佳方法。请注意,Numpy的searchsorted仅适用于b排序时显示的情况。

import timeit
import numpy as np

a = np.random.randint(1,100,(1000,1000))
b = np.arange(0,1000,1)

def o1():
    lo = min(a.min(), b.min())
    hi = max(a.max(), b.max())
    lut = np.zeros(hi - lo + 1, dtype=np.int64)
    lut[b - lo] = np.arange(len(b))
    a2 = lut[a - lo]
    return a2 

def o2():
    a2 = a.copy()
    fu = np.vectorize(lambda i: np.place(a2, a2==b[i], i))
    fu(np.arange(0,len(b),1))

print(timeit.timeit("np.searchsorted(b, a)", globals=globals(), number=2))
print(timeit.timeit("o1()", globals=globals(), number=2))
print(timeit.timeit("o2()", globals=globals(), number=2))

版画

0.061956800000189105
0.012765400000716909
2.220097600000372

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何用另一个数组中唯一值的索引替换numpy数组中的重复值?

如何用索引将另一个numpy数组中的值替换为另一个数组

如何用另一个数组的值替换包含索引的数组?

如何使用另一个数组和THAT数组中存在的值在数组中找到索引?

如何用另一个数组索引值替换一个数组键值?

Python:如果小于,如何用另一个数组的值替换数组中的值?

如何用另一个数组替换多维数组中的某些值

如何用另一个数组值替换数组键

用另一个数组的相同索引的值替换一个数组中的值?

如何在一个数组中找到最大值,对应于另一个数组中的唯一值/点?

用另一个数组中的值替换numpy数组的切片

根据另一个数组中的值对numpy数组的选择索引执行操作

在另一个3个值的总和中找到一个数组中的最大值

如何用另一个数组中的多个值过滤数组

如何用另一个数组填充数组中的缺失值

如何用另一个数组的值指定的索引删除数组的所有值?

用另一个numpy数组中的值替换numpy数组中的值

如何从另一个数组的值中获取一个 numpy 数组(Python)

如何基于另一个数组删除或屏蔽numpy数组中的值

如何在另一个数组中获取数组的索引值

Python Pandas:在另一个数据框中找到一个值并将其替换

如何根据Numpy中另一个数组的分组值生成一个数组?

Python Numpy:将一个数组中的值替换为另一数组中的对应值

如何从另一个数组中减去一个数组的每个值,以找到数组1的值减去数组2的值= 0的位置?

在另一个数组javascript中找到数组元素的索引

向量化为另一个数组中的每个元素在数组中找到最接近的值

如何在python中使用numpy将一个数组的值替换为另一个数组

如何用另一个数组的元素替换数组中的元素

如何用另一个数组的元素替换数组中的特定关键元素