2017-10-27 11 views
0

私は次の問題を抱えています:13M + nnz個の要素と約サイズのベクトルを含む非常に大きな疎行列を持っています。 99k +。これは、反復的に乗算し、それが動作するcrsマトリックスで保存するときですが、完了するのに3時間かかります。したがって、私はベクトルを対角行列に変換するので、直接2を掛けることができます。しかし、私は常にメモリエラーを起こしています(64ビットオペレーティングシステムの8 GB RAM)。ここに私のコードです:メモリエラー:2つの行列を掛ける

GG=list(chain.from_iterable(list(IDFMatrix.data))) 
dictDocFreqMat=TermFreq.dot(GG) #memory Error 
for i in range(counter): 
    TermFreqCsr[i,:]=TermFreq[i].multiply(GG) # Takes 3 hours 
    progessbar.update(1) 
progessbar.close() 

問題についてのアドバイスはありますか?

+0

理由は簡単です。あなたはより多くを得るか、より少なく使うためにあなたのプログラムを最適化します。 –

答えて

0

感謝。私はPythonを再インストールすることで私の問題を解決しました。それは(悲しいことに私が前に気づかなかった)32bitだった。 64バージョンをインストールした後にメモリエラーの問題が解決しました

0

メモリが不足しています。あなたができることは、この大きなデータのためのpysparkに回すことです。 Sparkにはブロック行列データ型があり、それを使って2つの行列を掛けることができます。

a_mat = tfidf_vect.fit_transform([..., ..., ...]) 
b_mat = tfidf_vect.fit_transform([..., ..., ...]) 

a_block_mat = create_block_matrix(a_mat) 
b_block_mat_tr = create_block_matrix(b_mat.transpose()) 
cosimilarities = a_block_mat.multiply(b_block_mat_tr) 

出典:https://labs.yodas.com/large-scale-matrix-multiplication-with-pyspark-or-how-to-match-two-large-datasets-of-company-1be4b1b2871e(3回目の試み)すべての編集や推奨事項について