python - 快速检查数组中的元素是否在另一个数组中(2D)

标签 python arrays numpy

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

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/

相关文章:

python - dask DataFrame 中的复杂过滤

python - 使用 Python 和 BeautifulSoup(将网页源代码保存到本地文件中)

python - github3.py。已提交文件的空列表

python - django:管理站点未格式化

python - 使用 Popen 打开进程并获取 PID

python - 从 python Scipy 中的连续三角形分布中绘制

python - 使用 linspace : array does not own its data 创建的调整数组大小

javascript:带有对象的公共(public)数组

c - 理解函数原型(prototype)

arrays - 查询最小列标题,同时排除空白并处理重复项