如何降低2D numpy数组的稀疏程度?

时间:2016-10-23 06:06:15

标签: python numpy

我有一个非常稀疏的数组,如下图所示:

arr = array([[0, 1, 0, 0, 0, 2],
             [0, 0, 2, 0, 0, 0],
             [0, 0, 0, 0, 0, 0],
             [0, 7, 0, 0, 4, 0]])

由于索引0和3的列都是零,我想删除它们并得到结果:

array([[1, 0, 0, 2],
       [0, 2, 0, 0],
       [0, 0, 0, 0],
       [7, 0, 4, 0]])

我以为我可以通过

查看每一栏
for i in len(arr):
    if arr[:, i] != 0:
        newarr = np.column_stack((newarr, arr[:, i]))

但我遇到一个错误,它教我使用a.all()..

1 个答案:

答案 0 :(得分:3)

使用简单的索引,方法是选择至少有一个非零项目的列(在第一个轴上使用any()):

In [9]: arr[:, arr.any(0)]
Out[9]: 
array([[1, 0, 0, 2],
       [0, 2, 0, 0],
       [0, 0, 0, 0],
       [7, 0, 4, 0]])