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

时间:2016-06-08 05:49:21

标签: python arrays numpy

我有一个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],但它返回了一维数组:[ 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]删除所有的零而不破坏它的结构?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

dt <- data.table(country = c('hh', 'hk', 'hh', 'kn'), stringsAsFactors=FALSE)