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
ありがとうございます! scipy.sparse輸入dok_matrixから
DOK = dok_matrix(raw_matrix)
行列= compute_svd(DOK)
私は別の例外を取得: は、私はこのようにそれを行います。 – Munichong
トレースバック(最後の最新の呼び出し):
ファイル "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
@ChongWang:' scipy.linalg.svd'はそうではありませんmagicically 'scipy.sparse'マトリックスで動作します。 'scipy.sparse.linalg.svds'を試してください。 –