我试图通过稀疏矩阵在numpy数组上应用布尔索引。
A = dense n x n matrix, where n is large
B = sparse n x n Boolean matrix
示例操作:
A[B] *= 2
A[~B] *= -2
有没有一种有效的方法来实现这一点,而无需将稀疏矩阵转换为密集矩阵(导致内存问题)?
答案 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