具有稀疏矩阵的布尔索引 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
我正在尝试通过稀疏矩阵在 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