【问题标题】:Boolean index Numpy array with sparse matrix具有稀疏矩阵的布尔索引 Numpy 数组
【发布时间】:2018-01-12 14:55:37
【问题描述】:

我正在尝试通过稀疏矩阵在 numpy 数组上应用布尔索引。

A = dense n x n matrix, where n is large

B = sparse n x n Boolean matrix

示例操作:

A[B] *= 2

A[~B] *= -2

有没有一种有效的方法来实现这一点,而无需将稀疏矩阵转换为密集矩阵(这会导致内存问题)?

【问题讨论】:

    标签: python numpy matrix scipy sparse-matrix


    【解决方案1】:

    您可以通过将稀疏矩阵转换为 COO 格式来访问与非零(即 True)值相关的行和列索引:

    B = B.tocoo()
    

    然后

    A[B.row, B.col] *= 2
    

    避免将B 转换为密集矩阵。


    如果B 是稀疏的,那么~B 是相当密集的。 为了有效地处理A[~B] *= -2,我们应该尽量避免直接评估~B。 相反,我们可以在任何地方乘以-2

    A *= -2
    

    然后修复B为True的那些位置:

    A[B.row, B.col] *= -1/2   
    

    【讨论】:

      猜你喜欢
      • 2011-09-18
      • 1970-01-01
      • 2018-07-27
      • 1970-01-01
      • 2012-01-15
      • 2014-05-12
      • 2016-08-26
      • 1970-01-01
      • 2019-12-04
      相关资源
      最近更新 更多