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]
2for
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。我不明白为什么我没有那样做!