7

2 つの大きな疎行列を乗算したいと考えています。1 つ目は 150,000x300,000 で、2 つ目は 300,000x300,000 です。最初の行列には約 1,000,000 個の非ゼロ項目があり、2 番目の行列には約 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 に答える