如何计算一个巨大的稀疏矩阵(1-SparseMatrix)?

时间:2013-07-02 13:20:52

标签: python numpy scipy sparse-matrix theano

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

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

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

这可能是另一种有效的方法吗?

感谢。

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

ss.data *= -1
ss.data += 1
对于稀疏矩阵中的所有非零元素,

将像1 - ss一样工作。