3

我有一个大的 numpy 数组(8 x 30000),我想根据某些标准删除一些行。此标准仅适用于一列。

例子:

>>> p = np.array([[0, 1, 3], [1 , 5, 6], [4, 3, 56], [1, 34, 4]])
>>> p
array([[ 0,  1,  3],
   [ 1,  5,  6],
   [ 4,  3, 56],
   [ 1, 34,  4]])

在这里,我想删除第三列的值> 30的每一行,即。这里是第 3 行。

由于数组非常大,我想避免for循环。我想到了这个:

>>> a[~(a>30).any(1), :]
array([[0, 1, 3],
   [1, 5, 6]])

但是在那里,它显然删除了最后两行。关于如何以有效的方式做到这一点的任何想法?

4

1 回答 1

4
p = p[~(p[:,2] > 30)]

或(如果您的情况很容易逆转):

p = p[p[:,2] <= 30]

返回

array([[ 0,  1,  3],
       [ 1,  5,  6],
       [ 1, 34,  4]])
于 2012-07-25T13:24:05.700 回答