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

Boolean index Numpy array with 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

有没有一种有效的方法可以在不将稀疏矩阵转换为密集矩阵(这会导致内存问题)的情况下实现这一目标?

您可以通过将稀疏矩阵转换为 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