在numpy中减少稀疏矩阵

在numpy中减少稀疏矩阵,numpy,matrix,sparse-matrix,Numpy,Matrix,Sparse Matrix,似乎我在这里遗漏了一些非常基本的东西。 我有一个很大的方阵,大部分是零。我想要的是将其简化为一个矩阵,该矩阵包含具有非零项的所有行和列。 例如: 1 1 0 1 1 1 0 1 0 0 0 0 1 1 0 1 应减少到: 1 1 1 1 1 1 1 1 1 有没有快速的方法可以做到这一点?像这样的方法怎么样: >>> arr array([[ 1., 1., 0., 1.], [ 1., 1., 0., 1.], [ 0., 0.,

似乎我在这里遗漏了一些非常基本的东西。 我有一个很大的方阵,大部分是零。我想要的是将其简化为一个矩阵,该矩阵包含具有非零项的所有行和列。 例如:

1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
应减少到:

1 1 1
1 1 1
1 1 1

有没有快速的方法可以做到这一点?

像这样的方法怎么样:

>>> arr
array([[ 1.,  1.,  0.,  1.],
       [ 1.,  1.,  0.,  1.],
       [ 0.,  0.,  0.,  0.],
       [ 1.,  1.,  0.,  1.]])

>>> mask = (arr==0)

arr = arr[~np.all(mask,axis=0)]
arr = arr[:,~np.all(mask,axis=1)]
>>> arr
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])

有一些非零和一些零条目的行/列呢?保留它们?是的,如果有任何非零元素,则应保留它们。我在考虑按顺序在不同的轴上切片。首先是全零的行,然后是全零的列。这正是我所需要的。不过有两个问题。首先,为什么
mask=(arr!=0)
不起作用(使用
np.all
vs
~np.all
)。其次,神秘的
~
是关于什么的?@Manbroski
~
是指向位NOT运算符的快捷方式,请参见。我会玩
np.所有的
和不同的掩码,看看我为什么按原样写这个操作,我不确定我能把它简明扼要地用文字表达出来。搜索特殊字符有点困难,这就是为什么我对它的用法的语义感到困惑。非常感谢。