让我们说我们有两个简单的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]
idx
是array([0, 1, 3, 4, 8])
的地方(这是我真正想要的)。
现在,我真的很好奇,是否在numpy或任何其他库(我相信那里已经存在一个库)中已经存在针对此问题的类似功能。否则,我现在将坚持工作方法。
答案 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
。