首页 文章

布尔索引具有稀疏矩阵的Numpy数组

提问于
浏览
1

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

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

B = sparse n x n Boolean matrix

示例操作:

A[B] *= 2

A[~B] *= -2

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

1 回答

  • 2

    您可以通过将其转换为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
    

相关问题