在python中乘以大型稀疏矩阵

Dan*_*anB 7 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将单独的矩阵存储在磁盘上,将它们拆分成更小的块,并从许多块的产品构建最终的矩阵产品.但是我希望能够实现一些相对简单的东西.

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

seg*_*sai 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
Run Code Online (Sandbox Code Playgroud)

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

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