Numpy:找到一个数组中出现在另一个数组中的元素的索引

Lan*_*anc 7 python arrays numpy

我有两个1D数组,我想知道一个数组中的元素是否出现在另一个数组中.

例如:

import numpy as np
A = np.array([ 1, 48, 50, 78, 85, 97])
B = np.array([38, 43, 50, 62, 78, 85])
Run Code Online (Sandbox Code Playgroud)

我想要:

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
Run Code Online (Sandbox Code Playgroud)

我试过了:

accuracy = np.searchsorted(A, B)
Run Code Online (Sandbox Code Playgroud)

但它给我带来了不良后果.

Ale*_*ley 13

你可以使用np.wherenp.in1d:

>>> np.where(np.in1d(A, B))[0]
array([2, 3, 4])
Run Code Online (Sandbox Code Playgroud)

np.in1d(A, B)返回一个布尔数组,指示是否A找到每个值B.np.where返回True值的索引.(如果您的数组未排序,这也会有效.)


per*_*iae 5

您应该首先np.intersect1d找到数组之间的集合交集(公共元素).

In [5]: np.intersect1d(A, B)
Out[5]: array([50, 78, 85])
Run Code Online (Sandbox Code Playgroud)

要从您的问题中获得所需的输出,您可以np.searchsorted只使用这些项目:

In [7]: np.searchsorted(A, np.intersect1d(A, B))
Out[7]: array([2, 3, 4])
Run Code Online (Sandbox Code Playgroud)