2011-12-27 8 views
0

LSIを使用してドキュメントを表すベクトルを生成しようとしました。私はScipyライブラリでsvdパッケージを使用しています。しかし、プログラムはメモリエラーをスローします。私の行列のサイズは100 * 13057です。これは私の8G RAMには大きすぎますか?scipyを使用してSVDを実行するときにメモリエラーが発生しました

私はこの問題をstackflowで検索しました。私の64ビットOSに64ビットPythonをインストールするだけでいいという人もいます。 (今、私は64ビットOS上に32ビットPythonを持っています)。しかし、すべてのライブラリを再インストールすることはあまりにも簡単です。別の意見は、疎なマトリックスを変換することです。

誰もがこの問題について考えていますか?ありがとう!

raw_matrix = [] 
for text in forest_lsi: 
    raw_matrix.append(text.get_vector()) 
from svd import compute_svd 
print("The size of raw matrix: "+str(len(raw_matrix))+" * "+str(len(raw_matrix[0]))) 
matrix = compute_svd(raw_matrix) 

Concoleのメッセージがのように怒鳴るです:あなたは約あるデフォルトdtype=np.floatを、使用している場合

The size of raw matrix: 100 * 13057 
Original matrix: 
[[1 1 2 ..., 0 0 0] 
[0 3 0 ..., 0 0 0] 
[0 0 0 ..., 0 0 0] 
..., 
[0 0 0 ..., 0 0 0] 
[0 0 1 ..., 0 0 0] 
[0 0 2 ..., 1 1 3]] 
Traceback (most recent call last): 
    File "D:\workspace\PyQuEST\src\Practice\baseline_lsi.py", line 93, in <module> 
    matrix = compute_svd(raw_matrix) 
    File "D:\workspace\PyQuEST\src\Practice\svd.py", line 12, in compute_svd 
    U, s, V = linalg.svd(matrix) 
    File "D:\Program\Python26\lib\site-packages\scipy\linalg\decomp_svd.py", line 79, in svd 
    full_matrices=full_matrices, overwrite_a = overwrite_a) 
MemoryError 

答えて

0

あなたV行列は、メモリの13057*13057*8バイトがかかります。 1.4GB。私の感想は、それがあなたの32ビットPythonにとって大きすぎるということです。 dtype=np.float32という32ビットの浮動小数点数を使用して、メモリ使用量を半分にするか、scipy.sparse(ほとんどの場合、情報検索の問題には良いアイディア)を使用してください。

+0

ありがとうございます! scipy.sparse輸入dok_matrixから
DOK = dok_matrix(raw_matrix)
行列= compute_svd(DOK)
私は別の例外を取得: は、私はこのようにそれを行います。 – Munichong

+0

トレースバック(最後の最新の呼び出し):
ファイル "D:\ワークスペース\ PyQuEST \ SRC \練習の\ baseline_lsi.py"
行列で、行96、= compute_svd(DOK)
ファイル「D:\ワークスペース\ Program Files \ Python26 \ lib \ site-packages \ scipy \ファイルを実行するには、次のコマンドを実行してください:\ PyQuest \ src \ Practice \ svd.py、12行目、compute_svd内
U、s、V = linalg.svd(マトリックス)
" linalg \ decomp_svd.py "、行79、svd full_matrices = full_matrices、overwrite_a = overwrite_a)
TypeError:float()引数は文字列または数値でなければなりません – Munichong

+0

@ChongWang:' scipy.linalg.svd'はそうではありませんmagicically 'scipy.sparse'マトリックスで動作します。 'scipy.sparse.linalg.svds'を試してください。 –

関連する問題