我想将两个大的稀疏矩阵相乘。第一个是150,000x300,000,第二个是300,000x300,000。第一个矩阵有大约1,000,000个非零项目,第二个矩阵有大约20,000,000个非零项目。有没有直接的方法来获得这些矩阵的产品?
我目前正在以csr或csc格式存储矩阵并尝试matrix_a * matrix_b
。这会产生错误ValueError: array is too big
。
我猜我可以用pytables将单独的矩阵存储在磁盘上,将它们拆分成更小的块,然后从许多块的产品构建最终的矩阵产品。但我希望能够实现一些相对简单的东西。
编辑:我希望有一个适用于任意大型稀疏矩阵的解决方案,同时隐藏(或避免)在内存和磁盘之间来回移动各个块的簿记。
答案 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
那么也许你的矩阵是这样的,他们的产品不是很稀疏?