In [318]: arr = np.arange(24).reshape(8,3)
In [319]: test = np.array([6,7,8])
两者之间的全数组比较:
In [322]: np.isin(arr,test)
Out[322]:
array([[False, False, False],
[False, False, False],
[ True, True, True],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]])
查找所有术语匹配的行:
In [323]: np.isin(arr,test).all(axis=1)
Out[323]: array([False, False, True, False, False, False, False, False])
使用它的逆作为掩码来选择保持行:
In [324]: arr[~_]
Out[324]:
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 9, 10, 11],
[12, 13, 14],
[15, 16, 17],
[18, 19, 20],
[21, 22, 23]])
isin 实际上是in1d 加上一个重塑:
In [327]: np.in1d(arr,test)
Out[327]:
array([False, False, False, False, False, False, True, True, True,
False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False])
In [328]: np.in1d(arr,test).reshape(arr.shape)
Out[328]:
array([[False, False, False],
[False, False, False],
[ True, True, True],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False],
[False, False, False]])
这种广播比较也有效:
(arr[:,None,:]==test[None,:,None]).any(axis=1).all(axis=1)