在numpy
中有没有一种好方法来获取array1
中每个元素在array2
中的位置的元素级索引?
举个例子:
array1 = np.array([1, 3, 4])
array2 = np.arange(-2, 5, 1, dtype=np.int)
np.where(array1[0] == array2)
# (array([3]),)
np.where(array1[1] == array2)
# (array([5]),)
np.where(array1[2] == array2)
# (array([6]),)
我想做
np.where(array1 == array2)
# (array([3 5 6]),)
这样的事情可能吗?我们保证array1
中的所有条目都可以在array2
中找到。
2条答案
按热度按时间o2gm4chl1#
np.in1d
获取匹配发生位置的掩码,然后使用np.where
获取这些索引位置-np.searchsorted
-请注意,如果
array2
没有排序,我们需要使用额外的可选参数sorter
。样品运行-
运行时间测试-
iezvtpos2#
如果你的数组不是太大,这里有一个更简单的方法。
如果array1的大小为N,array2的大小为M,这将创建一个shape(N,M)的临时数组,因此,如果您的数组太大,内存无法容纳,则不建议使用上述方法。