从numpy ndarray删除零行

问题描述

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

例如:给定

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

我想得到

[ 
  [1.0,0.0] 
]

解决方法

您可以按如下所示排除这些元素:

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

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

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

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

请参阅:https://www.geeksforgeeks.org/numpy-indexing/

,

您可以使用布尔数组建立索引:

a = np.array([[1.0,0.0]])

print(a[a.any(axis=1)])

此处a.any(axis=1)将是True,其中该行中的任何元素都不为零。这些是我们要保留的行。

,

一个可能的解决方案是使用所有零的总和为零的事实。使用该事实创建遮罩:

>>> bar = np.array ([ [1.0,0.0] ] )
>>> mask = bar.sum(axis=1)==0
>>> bar[mask]
array([[1.,0.]])
,

这里是一种方法:

import numpy as np
x    = np.array([ [1.0,0.0] ])
m,n = x.shape
rows = [row for row in range(m) if not all(x[row] == 0)]
x    = x[rows]
print(x)

这也适用于包含负数据的数组。如果我们使用sum,假设一行包含 [-1,0,1]我们不希望它被删除。

,
a=np.array([r for r in a if any(r)])

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...