如何获取包含在另一个数组中的一个数组的值的所有索引?

时间:2018-11-05 11:33:15

标签: python arrays numpy indexof

让我们说我们有两个简单的1d numpy数组:

a = np.array([1, 1, 2, 5, 7, 8, 2, 4, 5, 6]) 
b = np.array([1, 5, 7])

现在,我要获取所有可能的索引,其中数组b中的每个值都包含在数组a中。

我们可以例如以下:

idx = np.where(np.any(a.reshape((-1, 1))==b, axis=1))[0]

idxarray([0, 1, 3, 4, 8])的地方(这是我真正想要的)。

现在,我真的很好奇,是否在numpy或任何其他库(我相信那里已经存在一个库)中已经存在针对此问题的类似功能。否则,我现在将坚持工作方法。

1 个答案:

答案 0 :(得分:3)

使用np.isin / np.in1d-

np.flatnonzero(np.isin(a,b))
# or np.flatnonzero(np.in1d(a,b))

对于np.searchsorted排序的b,可能会更有表​​现-

sidx = np.searchsorted(b,a)
sidx[sidx==len(b)] = len(b)-1
out = np.flatnonzero(b[sidx]==a)

如果未对b进行排序,请对其进行排序,然后使用它代替b