Python 使用布尔掩码对scipy稀疏矩阵进行切片
在0.10.0和0.10.1中,我遇到了对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
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,可以解决此问题。