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

时间:2018-01-12 14:55:37

标签: python numpy matrix scipy sparse-matrix

我试图通过稀疏矩阵在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 个答案:

答案 0 :(得分: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