繁体   English   中英

从numpy数组中删除某些元素而不破坏结构

[英]remove certain elements from numpy array without destroying the structure

我有一个numpy数组如下,我想删除所有零。

 a = [[ 5  2  0  9  4]
 [ 2  0  9  4  2]
 [ 0  9  4  2  6]
 [ 9  4  2  6  8]
 [ 4  2  6  8  0]
 [ 2  6  8  0  3]
 [ 6  8  0  3 11]
 [ 8  0  3 11  7]
 [ 0  3 11  7  1]
 [ 3 11  7  1  5]
 [11  7  1  5 21]
 [ 7  1  5 21  8]
 [ 1  5 21  8  0]
 [ 5 21  8  0 18]
 [21  8  0 18 12]
 [ 8  0 18 12  3]
 [ 0 18 12  3  9]]

删除全零后我想要的如下:

 b = [[ 5  2  9  4]
 [ 2  9  4  2]
 [ 9  4  2  6]
 [ 9  4  2  6  8]
 [ 4  2  6  8]
 [ 2  6  8  3]
 [ 6  8  3 11]
 [ 8  3 11  7]
 [ 3 11  7  1]
 [ 3 11  7  1  5]
 [11  7  1  5 21]
 [ 7  1  5 21  8]
 [ 1  5 21  8]
 [ 5 21  8 18]
 [21  8 18 12]
 [ 8 18 12  3]
 [18 12  3  9]]

我尝试a[a>0]但它返回了1D阵列: [ 5 2 9 4 2 9 4 2 9 4 2 6 9 4 2 6 8 4 2 6 8 2 6 8 3 6 8 3 11 8 3 11 7 3 11 7 1 3 11 7 1 5 11 7 1 5 21 7 1 5 21 8 1 5 21 8 5 21 8 18 21 8 18 12 8 18 12 3 18 12 3 9] 我想知道是否有这样的命令a[a>0,axis=1]删除所有的零而不破坏它的结构?

结果数组不能是numpy数组,因为它的形状不是常量。 因此,一个可能的解决方案是以标准的pythonic方式:

b = [row[row>0] for row in a]

如果每列中的零个数字完全相同,您似乎想要删除零。 请注意,在您的示例中,这不可能。

b=np.hstack([y.reshape((len(y),1)) for y in [x[x>0] for x in [a[:,i] for i in range(a.shape[1])]]])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM