快速检查数组元素是否在另一个二维数组中。

3

给定一个二维数组,检查其元素是否在另一个二维数组中。如果可能的话不需要循环遍历第二个数组。

a = np.array([[1,0], [2,0], [3,0]])
b = np.array([[1,0], [3,0]])

检查a数组是否包含在b数组中。

我尝试过:

np.isin(a, b)

array([[ True,  True],
   [False,  True],
   [ True,  True]])

And I want:

array([True, False, True])

谢谢

也尝试了这样的代码:np.sum(np.isin(a, b), axis=1) <= 1但是它并不能适用于所有输入。


澄清一下,您想要得到[x in b for x in a]在Numpy中的等效写法吗? - a_guest
2个回答

3
您可以像下面这样使用np.all(-1)np.any(-1)
>>> a = np.array([[1,0], [2,0], [3,0]])
>>> b = np.array([[1,0], [3,0]])

>>> (a[:, None] == b).all(-1).any(-1)
array([ True, False,  True])


# for more detail
>>> (a[:,None] == b)
array([[[ True,  True],
        [False,  True]],

       [[False,  True],
        [False,  True]],

       [[False,  True],
        [ True,  True]]])

>>> (a[:, None] == b).all(-1)
array([[ True, False],
       [False, False],
       [False,  True]])

另一个例子:

>>> a = np.array([[1,5], [1,9], [3,9]])
>>> b = np.array([[1,5], [3,9]])
>>> (a[:, None] == b).all(-1).any(-1)
array([ True, False,  True])

@a_guest 编辑了回答 - I'mahdi

1
您可以通过扩展数组并将它们相互广播来结合使用 np.anynp.all
result = np.any(
    np.all(
        a[None, :, :] == b[:, None, :],
        axis=-1,
    ),
    axis=0,
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接