我对此做了很多研究,但找不到解决这个问题的切实可行的办法。我正在使用scipy创建csr稀疏矩阵,并希望从所有矩阵的等效矩阵中减去该矩阵。在scipy和numpy符号中,如果矩阵不是稀疏的,我们可以通过简单地编写1-MatrixVariable来实现。但是,如果矩阵是稀疏的,则不执行此操作。我可以想到以下明显的解决方案:
遍历整个稀疏矩阵,将所有零元素设置为1,将所有非零元素设置为0。
但这将创建一个矩阵,其中大多数元素是1,只有少数元素是0,这不再是稀疏的,因为它的巨大尺寸无法转换为稠密的。
有什么办法可以替代和有效地做到这一点?
谢谢。

最佳答案

你的新矩阵不会稀疏,因为它到处都有1s,所以你需要一个密集的数组来容纳它:

new_mat = np.ones(sps_mat.shape, sps_mat.dtype) - sps_mat.todense()

这就要求你的矩阵符合内存。实际上,它需要在内存中放3次。如果这是一个问题,您可以让它更有效地执行以下操作:
new_mat = sps_mat.todense()
new_mat *= -1
new_mat += 1

09-30 15:47
查看更多