我正在尝试通过稀疏矩阵在 numpy 数组上应用 bool 索引。
A = dense n x n matrix, where n is large
B = sparse n x n Boolean matrix
操作示例:
A[B] *= 2
A[~B] *= -2
是否有一种有效的方法可以实现这一目标,而无需将稀疏矩阵转换为密集矩阵(这会导致内存问题)?
最佳答案
您可以通过将稀疏矩阵中的非零(即 True)值转换为 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
关于python - 具有稀疏矩阵的 bool 索引 Numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48228736/