使用布尔掩码切割scipy稀疏矩阵

时间:2013-11-19 19:27:16

标签: python scipy slice sparse-matrix

我在scipy稀疏矩阵的切片如何在0.10.0和0.10.1中工作时遇到了不同。请考虑以下代码:

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]]

我不确定这是一个错误还是我做错了什么。我使用coo_matrixcsc_matrix得到了相同的结果。

我正在尝试从矩阵中删除总和为0的所有行。我知道csr_matrix不支持有效的列切片,我不应该这样做。

2 个答案:

答案 0 :(得分:1)

在这些情况下,what_cols是什么。在最近的scipy(0.13.0)中,结果与您的第一个(0.10.0)匹配。如果你想在版本中追溯这些变化,你可能不得不深入了解scipy的github源代码。

答案 1 :(得分:1)

使用np.flatnonzero(desired_cols)代替desired_colsscipy.sparse将支持它。 scipy.sparse中无法使用完整矩阵API支持,并且正在逐步引入功能。