首页 > 解决方案 > 从 numpy ndarray 中删除零行

问题描述

给定 mxn nd 浮点数组,获得不包含全零行的 m'xn nd 浮点数组的最佳方法是什么?

例如:给定

[ 
  [1.0, 0.0, 2.0], 
  [0.0, 0.0, 0.0], 
  [2.0, 1.0, 0.0] 
]

我想得到

[ 
  [1.0, 0.0, 2.0], 
  [2.0, 1.0, 0.0] 
]

标签: pythonnumpy-ndarray

解决方案


您可以按如下方式排除这些元素:

>>> import numpy as np
>>> x = np.array([ [1.0, 0.0, 2.0], [0.0, 0.0, 0.0], [2.0, 1.0, 0.0] ])
>>> x
array([[1., 0., 2.],
       [0., 0., 0.],
       [2., 1., 0.]])
>>> sumrow = np.abs(x).sum(-1)
>>> x[sumrow>0]
array([[1., 0., 2.],
       [2., 1., 0.]])

注意:@Akavall 正确指出这np.abs()将防止出现负值问题。

此外,另一种更复杂的方法:

>>> x = np.array([ [1.0, 0.0, 2.0], [0.0, 0.0, 0.0], [2.0, 1.0, 0.0] ])
>>> x[~np.all(x == 0, axis=1)]
array([[1., 0., 2.],
       [2., 1., 0.]])

见:https ://www.geeksforgeeks.org/numpy-indexing/


推荐阅读