我正在尝试通过稀疏矩阵在numpy数组上应用布尔索引 .
A = dense n x n matrix, where n is large B = sparse n x n Boolean matrix
示例操作:
A[B] *= 2 A[~B] *= -2
有没有一种有效的方法来实现这一点,而无需将稀疏矩阵转换为密集矩阵(这会导致内存问题)?
您可以通过将其转换为COO格式来访问与稀疏矩阵中的非零(即True)值关联的行索引和列索引:
B = B.tocoo()
然后
A[B.row, B.col] *= 2
避免将 B 转换为密集矩阵 .
B
如果 B 稀疏则 ~B 非常密集 . 要有效地处理 A[~B] *= -2 ,我们应该尽量避免直接评估 ~B . 相反,我们可以在任何地方乘以 -2 :
~B
A[~B] *= -2
-2
A *= -2
然后修复 B 为True的位置:
A[B.row, B.col] *= -1/2
1 回答
您可以通过将其转换为COO格式来访问与稀疏矩阵中的非零(即True)值关联的行索引和列索引:
然后
避免将
B
转换为密集矩阵 .如果
B
稀疏则~B
非常密集 . 要有效地处理A[~B] *= -2
,我们应该尽量避免直接评估~B
. 相反,我们可以在任何地方乘以-2
:然后修复
B
为True的位置: