过滤掉多维 numpy 数组中的行

Filtering out rows in multidimensional numpy arrays

假设我有一个这样的数组:

array([[ 1,  2],
       [-1, -2],
       [ 0,  0],
       [-1,  2],
       [ 2, -1]])

我想过滤掉所有包含负数的行。

而且,希望得到这个:

array([[ 1,  2],
       [ 0,  0]])

到目前为止我试过这个:

>>> print(a[a>=0].reshape(3,2))
array([[1, 2],
       [0, 0],
       [2, 2]])

但是如您所见,我得到了一维数组并且我得到不需要的行(在本例中是 [2, 2]

如何在不使用任何 for 循环的情况下执行此操作?提前致谢。

您可以使用np.all来检查一行中的所有值是否都满足条件。

import numpy as np 

a = np.array([[ 1,  2],
              [-1, -2],
              [ 0,  0],
              [-1,  2],
              [ 2, -1]])

a[np.all(a >= 0, axis=1)]
# returns:
array([[1, 2],
       [0, 0]])