【问题标题】: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