python - 消除不满足匹配条件的数组行

标签 python arrays numpy

考虑一个由元素对组成的数组 M。 (我使用空格来强调我们将处理元素对)。实际的数组将有大量的行和 4、6、8 或 10 列。

import numpy as np

M = np.array([[1,3,  2,1,  4,2,  3,3],
              [3,5,  6,9,  5,1,  3,4],
              [1,3,  2,4,  3,4,  7,2],
              [4,5,  1,2,  2,1,  2,3],
              [6,4,  4,1,  6,1,  4,7],
              [6,7,  7,6,  9,7,  6,2],
              [5,3,  1,5,  3,3,  3,3]])

问题:我想从 M 中消除具有元素对的行,该元素对与该行中的任何其他对没有共同元素

在数组 M 中,应消除第 2 行第 4 行。原因如下:
第二行:对 (6,9) 与 (3,5)、(5,1) 或 (3,4) 没有共同元素
第四行:对 (4,5) 与 (1,2)、(2,1) 或 (2,3) 没有共同元素

我确信有一个很好的广播解决方案,但我看不到它。

最佳答案

这是一个广播解决方案。希望它是不言自明的:

a = M.reshape(M.shape[0],-1,2)

mask = ~np.eye(a.shape[1], dtype=bool)[...,None]

is_valid = (((a[...,None,:]==a[:,None,...])&mask).any(axis=(-1,-2))
            |((a[...,None,:]==a[:,None,:,::-1])&mask).any(axis=(-1,-2))
           ).all(-1)

M[is_valid]

输出:

array([[1, 3, 2, 1, 4, 2, 3, 3],
       [1, 3, 2, 4, 3, 4, 7, 2],
       [6, 4, 4, 1, 6, 1, 4, 7],
       [6, 7, 7, 6, 9, 7, 6, 2],
       [5, 3, 1, 5, 3, 3, 3, 3]])

关于python - 消除不满足匹配条件的数组行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64813728/

相关文章:

python - 构造函数及使用方法

c - 随机字符数组排序

PHP - 如何创建这样的数组?

python - 如何更快地用python计算指数移动平均线?

python - python 中的 Opencv 2.4.3 estimateRigidTransform

python - 迭代从函数返回的可迭代元组

python - 从数组中删除列表符号

python - OperatorNotAllowedInGraphError : using a `tf.Tensor` as a Python `bool` is not allowed in Graph execution

python - Tensorflow 宽深模型,具有不同数据集的 AttributeError

c - 将一维固定数组传递给二维指针函数