Python 比较两个不同大小的numpy数组的最佳方法

Python 比较两个不同大小的numpy数组的最佳方法,python,numpy,Python,Numpy,我有两个不同大小的numpy数组。理论上,一个将是另一个的子集。我想在较大的numpy数组中查找索引,其值与较小的子集匹配 例如 A = [ 7.52 8.32 16.96 20.05 -24.96 -42.69 -47.47 55.04 -57.62 2.03 61.94 64.41 -71.3 93.6 151.65 151.75 -0.43 -3.18 4.59 -5.55 6.44 -9.48 9.31 0.67 -14.34 -8.

我有两个不同大小的
numpy数组。理论上,一个将是另一个的子集。我想在较大的
numpy数组中查找索引,其值与较小的子集匹配

例如

A = [ 7.52   8.32  16.96  20.05 -24.96 -42.69 -47.47  55.04 -57.62   2.03
  61.94  64.41 -71.3   93.6  151.65 151.75  -0.43  -3.18   4.59  -5.55
   6.44  -9.48   9.31   0.67 -14.34  -8.09  16.23  17.69  19.46  23.52
 -52.59]

B = [61.94 16.23 19.46 -5.55 -0.43 93.6]
2
for
loops将完成这项任务,但我想知道是否有python方法可以更快地完成这项任务

我尝试使用一个循环,但它不起作用(我怀疑
numpy.where
不能使用不同大小的数组)

def get_索引(self、lst_1、lst_2):
tmp_list=list()
对于范围内的i(最小值(len(lst_1),len(lst_2)):
如果np.where(lst_2[i]==lst_1):
tmp_列表追加(一)
返回tmp_列表
如有任何建议,将不胜感激:)

谢谢

您可以使用它来检查哪些索引匹配,您将得到一个布尔数组

>>> np.in1d(A,B)
array([False, False, False, False, False, False, False, False, False,
       False,  True, False, False,  True, False, False,  True, False,
       False,  True, False, False, False, False, False, False,  True,
       False,  True, False, False])
然后,您可以执行以下操作,以获得实际索引:

>>> np.arange(A.shape[0])[np.in1d(A,B)]
array([10, 13, 16, 19, 26, 28])
注意:这对于大型阵列执行速度非常快,并且易于检查相反的情况。要么
np.inad(A,B,invert=True)
要么
np.arange(A.shape[0])[~np.inad(A,B)]


编辑:正如评论中所建议的,获取索引的明显方式(我错过了,天知道为什么?!)是:
np.nonzero(np.in1d(a,B))

获取索引的更简洁方式是
np.nonzero(np.in1d(a,B))
@DanielF True。我不明白为什么我没有那样做!