Numpy选择具有多列作为条件的行

时间:2017-07-18 17:14:22

标签: python numpy

说你有以下数组

a = np.array([[-1,-2,-3,4],[6,-1,-3,-4],[3,2,5,6]])

并且您想要所有行,其中位置0,1和2是< 0.

到目前为止,我发现了以下不合理的解决方案:

b = a[np.logical_and(a[:, 0]<0, a[:, 1]<0, a[:, 2]<0)]

c= a[np.where((a[:, 0]<0) * (a[:, 1]<0) * (a[:, 2]<0))]

考虑到我想要处理大型数组,这将是一个非常糟糕的解决方法。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

您可以简单地使用:

b = a[np.all(a[:,:3] < 0,axis=1)]

因此,您可以先使用切片构建子矩阵 a[:,:3]将为矩阵a的前三列构建一个矩阵。接下来,我们使用< 0来检查所有这些元素是否都小于零。

然后,我们将在每一行上执行逻辑和(通过将列组合在一起)。这将为每一行构建一维矩阵。如果所有三列都是True,则元素将为True。否则为False

最后我们使用 masking 来构建一个子矩阵,其中前三列 all 小于0.这可能会比号 numpy calls更少,因此我们每次通话都会做更多工作。