我有 2numpy array
个不同尺寸的。理论上,一个将是另一个的子集。我想在较大的索引中找到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]
Run Code Online (Sandbox Code Playgroud)
2 个for
循环将执行此操作,但我想知道是否有 Python 方法可以更快地执行此操作。
我尝试了一个循环,但它不起作用(我怀疑numpy.where
它不适用于不同大小的数组)
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]
Run Code Online (Sandbox Code Playgroud)
任何建议将不胜感激:)
谢谢
您可以使用np.in1d
检查哪些索引匹配,您将获得一个布尔数组。
>>> 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])
Run Code Online (Sandbox Code Playgroud)
然后您可以执行以下操作以获取实际索引:
>>> np.arange(A.shape[0])[np.in1d(A,B)]
array([10, 13, 16, 19, 26, 28])
Run Code Online (Sandbox Code Playgroud)
注意:对于大型数组,这执行得非常快,并且易于检查相反的情况。无论是np.in1d(A,B,invert=True)
或np.arange(A.shape[0])[~np.in1d(A,B)]
编辑:正如评论中所建议的,以一种非常显眼的方式(我错过了,天知道为什么?!)来获取索引:np.nonzero(np.in1d(A,B))