Python 使用布尔掩码对scipy稀疏矩阵进行切片

Python 使用布尔掩码对scipy稀疏矩阵进行切片,python,scipy,slice,sparse-matrix,Python,Scipy,Slice,Sparse Matrix,在0.10.0和0.10.1中,我遇到了对scipy稀疏矩阵进行切片的不同之处。考虑下面的代码: from numpy import array, ravel from scipy.sparse import csr_matrix mat = csr_matrix(array([[1, 0, 0], [0,1,0], [1,0,0]])) desired_cols = ravel(mat.sum(0)) > 0 print mat[:, desired_cols].A 在scipy

在0.10.0和0.10.1中,我遇到了对scipy稀疏矩阵进行切片的不同之处。考虑下面的代码:

from numpy import array, ravel
from scipy.sparse import csr_matrix

mat = csr_matrix(array([[1, 0, 0], [0,1,0], [1,0,0]]))
desired_cols = ravel(mat.sum(0)) > 0

print mat[:, desired_cols].A
在scipy 0.10.0中,我得到了我期望得到的:

[[1 0]
 [0 1]
 [1 0]]
在0.10.1和0.12.0中,我得到

[[0 0 1]
 [1 1 0]
 [0 0 1]]
我不确定这是一个bug还是我做错了什么。我使用
coo_矩阵
csc_矩阵
得到了相同的结果


我正在尝试从矩阵中删除总和为0的所有行。我理解
csr\u matrix
不支持高效的列切片,我不应该这样做。

在这些情况下需要什么。在最近的scipy(0.13.0)中,结果与第一个(0.10.0)匹配。如果您想追溯到版本中如此久远的变化,您可能必须深入了解scipy的github源代码

使用
np.flatnonzero(期望值)
而不是
期望值
scipy.sparse
将支持它。完整的矩阵API支持在scipy中不可用。稀疏的功能正在逐步引入。

在这些情况下,
需要什么。在最近的scipy(0.13.0)中,结果与第一个(0.10.0)匹配。如果要追溯到版本中的更改,您可能需要深入了解scipy的github源代码。
desired\u cols
的值是
array([True,True,False],dtype=bool)
。通过升级到scipy 0.13.0,可以解决此问题。