【问题标题】:Slicing a scipy sparse matrix using a boolean mask使用布尔掩码对 scipy 稀疏矩阵进行切片
【发布时间】:2013-12-03 12:35:01
【问题描述】:

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

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

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

【问题讨论】:

  • 在这些情况下desired_cols 是什么。在最近的 scipy (0.13.0) 中,结果与您的第一个 (0.10.0) 匹配。如果您想在版本中追踪这么远的更改,您可能必须深入研究 scipy 的 github 源代码。

标签: python scipy slice sparse-matrix


【解决方案1】:

在这些情况下,desired_cols 是什么。在最近的 scipy (0.13.0) 中,结果与您的第一个 (0.10.0) 匹配。如果您想在版本中追踪这么远的更改,您可能必须深入研究 scipy 的 github 源代码。

【讨论】:

  • desired_cols 的值为array([ True, True, False], dtype=bool)。通过升级到 scipy 0.13.0 解决了这个问题。
【解决方案2】:

使用np.flatnonzero(desired_cols) 代替desired_colsscipy.sparse 将支持它。 scipy.sparse 不提供完整的矩阵 API 支持,功能正在逐步推出。

【讨论】:

    猜你喜欢
    • 2011-11-28
    • 2019-02-12
    • 2019-10-04
    • 2015-07-28
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    相关资源
    最近更新 更多