[英]numpy: how to apply boolean index array on slice of numpy matrix cheaply
[英]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
是否有一种有效的方法可以在不将稀疏矩阵转换为密集矩阵(这会导致内存问题)的情况下实现这一目标?
您可以通过将稀疏矩阵中的非零值(即True)转换为COO格式来访问与之相关的行索引和列索引:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.