我有两个1D数组,我想知道一个数组中的元素是否出现在另一个数组中。
例如:
import numpy as np
A = np.array([ 1, 48, 50, 78, 85, 97])
B = np.array([38, 43, 50, 62, 78, 85])
我想:
C = [2,3,4] # since 50 in second array occurs in first array at index 2,
# similarly 78 in second array occurs in first array in index 3,
# similarly for 85, it is index 4
我试过了:
accuracy = np.searchsorted(A, B)
但它给我带来了不良后果。
答案 0 :(得分:11)
您可以使用np.where
和np.in1d
:
>>> np.where(np.in1d(A, B))[0]
array([2, 3, 4])
np.in1d(A, B)
返回一个布尔数组,指示A
中是否找到B
的每个值。 np.where
返回True
值的索引。 (如果您的数组未排序,这也可以。)
答案 1 :(得分:5)
您应该从np.intersect1d
开始,它会找到数组之间的集合交集(公共元素)。
In [5]: np.intersect1d(A, B)
Out[5]: array([50, 78, 85])
要从您的问题中获得所需的输出,您可以将np.searchsorted
仅用于这些项目:
In [7]: np.searchsorted(A, np.intersect1d(A, B))
Out[7]: array([2, 3, 4])