问题描述
给定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)])