在Python和numpy中,如何删除具有特定条件的数组行

时间:2013-11-30 19:21:16

标签: python arrays numpy

说我是否有数组:

b=np.arange(10,40).reshape(10,3)
b[3,0]=b[6,1]=b[7,2]=0

array([[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18],
       [ 0, 20, 21],
       [22, 23, 24],
       [25, 26, 27],
       [28,  0, 30],
       [31, 32,  0],
       [34, 35, 36],
       [37, 38, 39]])

从数组中删除具有任何element = 0的行的最简单方法是什么?

我找到的最接近的答案似乎是:Removing rows in NumPy efficiently

1 个答案:

答案 0 :(得分:4)

最简单的?也许

>>> b = b[~(b == 0).any(axis=1)]
>>> b
array([[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18],
       [22, 23, 24],
       [25, 26, 27],
       [34, 35, 36],
       [37, 38, 39]])

保留除了具有任何元素等于零的行之外的所有行。这不一定是最快的,但如果这是你的代码中的瓶颈,我会非常惊讶,并且花费更多的时间来优化比你保存的更容易。