在python中乘以大型稀疏矩阵

时间:2012-06-14 05:27:58

标签: python numpy scipy sparse-matrix matrix-multiplication

我想将两个大的稀疏矩阵相乘。第一个是150,000x300,000,第二个是300,000x300,000。第一个矩阵有大约1,000,000个非零项目,第二个矩阵有大约20,000,000个非零项目。有没有直接的方法来获得这些矩阵的产品?

我目前正在以csr或csc格式存储矩阵并尝试matrix_a * matrix_b。这会产生错误ValueError: array is too big

我猜我可以用pytables将单独的矩阵存储在磁盘上,将它们拆分成更小的块,然后从许多块的产品构建最终的矩阵产品。但我希望能够实现一些相对简单的东西。

编辑:我希望有一个适用于任意大型稀疏矩阵的解决方案,同时隐藏(或避免)在内存和磁盘之间来回移动各个块的簿记。

1 个答案:

答案 0 :(得分:6)

很奇怪,因为以下内容对我有用:

import scipy.sparse
mat1 = scipy.sparse.rand(150e3, 300e3, density=1e6/150e3/300e3)
mat2 = scipy.sparse.rand(300e3, 300e3, density=20e6/150e3/300e3)
cmat1 = scipy.sparse.csc_matrix(mat1)
cmat2 = scipy.sparse.csc_matrix(mat2)
res = cmat1 * cmat2

我正在使用最新的scipy。而python使用的RAM量约为3GB

那么也许你的矩阵是这样的,他们的产品不是很稀疏?