我有 2 numpy array
不同尺寸的s。从理论上讲,一个将是另一个的子集。我想在更大的 numpy array
中找到索引它的值与较小的子集匹配。
例如
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
循环可以完成这项工作,但我想知道是否有一种Python方法可以更快地做到这一点。
我尝试了一个循环,但它不起作用(我怀疑 numpy.where
不适用于不同大小的数组)
def get_index(self, lst_1, lst_2):
tmp_list = list()
for i in range(min(len(lst_1), len(lst_2))):
if np.where(lst_2[i] == lst_1):
tmp_list.append(i)
return tmp_list
如有任何建议,我们将不胜感激:)
谢谢
最佳答案
您可以使用np.in1d
检查哪些索引匹配,您将得到一个 bool 数组。
>>> 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.in1d(A,B,invert=True)
或 np.arange(A.shape[0])[~np.in1d(A,B)]
编辑:正如评论中所建议的,一种明显的方式(我错过了,上帝知道为什么?!)来获取索引:np.nonzero(np.in1d(A ,B))
关于python - 比较两个不同大小的 numpy 数组的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58745162/