7

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

我目前以 csr 或 csc 格式存储矩阵并尝试matrix_a * matrix_b. 这给出了错误ValueError: array is too big

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

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

4

1 回答 1

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

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

于 2012-06-14T09:56:40.240 回答