3

我对此进行了很多研究,但找不到解决此问题的实用方法。我正在使用 scipy 创建 csr 稀疏矩阵,并希望从所有等价矩阵中减去该矩阵。在 scipy 和 numpy 表示法中,如果矩阵不是稀疏的,我们可以通过简单地编写 1 - MatrixVariable 来做到这一点。但是,如果 Matrix 是稀疏的,则不会执行此操作。我可以想到以下明显的解决方案:

遍历整个稀疏矩阵,将所有零元素设置为 1,将所有非零元素设置为 0。

但这会创建一个矩阵,其中大多数元素为 1,只有少数元素为 0,它不再是稀疏的,并且由于其巨大的尺寸无法转换为密集的。

有什么可以替代且有效的方法来做到这一点?

谢谢。

4

2 回答 2

1

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

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
于 2013-07-02T13:57:01.747 回答
0

您可以访问稀疏矩阵中的数据,1D array以便:

ss.data *= -1
ss.data += 1

1 - ss对于稀疏矩阵中的所有非零元素,将像 , 一样工作。

于 2013-07-02T13:26:35.310 回答