首页 > 解决方案 > 行满足涉及元素匹配的 3 个条件的 Numpy 数组

问题描述

这个问题有三个相关的部分。考虑具有 4 列的 numpy 数组样本 P。

import numpy as np

P = np.array([-4, 5, 2, -3],
             [-5, 6, 0, -5],
             [-6, 5, -2, 5],
             [1, -2, 1, -2],
             [2, -4, -6, 8],
             [-4, 9, -4, 2],
             [0, -8, -8, 1]])

我希望学习如何构建三个新数组:

a) P1:这是 P,其中行的第一个元素在最后 3 个元素中匹配。

b) P2:这是 P,其中一行的前 2 个元素在后 2 个元素中匹配。

c) P3:这是 P,其中一行的前 3 个元素与最后一个元素匹配。

对于小样本数组,结果将是:

P1 = [[-5, 6, 0, -5],
      [1, -2, 1, -2],
      [-4, 9, -4, 2]]


P2 = [[-5, 6, 0, -5],
      [-6, 5, -2, 5],
      [1, -2, 1, -2],
      [-4, 9, -4, 2],
      [0, -8, -8, 1]]

P3 =  [-5, 6, 0, -5],
      [-6, 5, -2, 5],
      [1, -2, 1, -2]]

标签: pythonarraysnumpy

解决方案


您想要选择满足给定条件的所有行,因此您需要遍历 的行P,构建 aboolean array并将其应用于 的行P。在您的情况下,我能想到的检查是否存在共享元素的最简单方法是创建两个sets 并检查它们的交集是否为空。这可以通过set.isdisjoint.

最终代码:

P1 = P[[not set(row[:1]).isdisjoint(row[1:]) for row in P], :]

P2 和 P3 类似。


推荐阅读