给定一个二维数组,检查它的元素是否在另一个二维数组中。不循环遍历第二个数组(如果可能)。
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]])
我想要:
array([True, False, True])
谢谢
也试过类似的东西:np.sum(np.isin(a, b), axis=1) <= 1
但它不适用于所有输入。
最佳答案
您可以像下面这样使用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])
关于python - 快速检查数组中的元素是否在另一个数组中(2D),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69435359/