0

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

この問題を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 )

コンコールのメッセージは次のとおりです。

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
4

1 に答える 1

0

デフォルトの約を使用している場合、Vマトリックスは数バイトのメモリを使用します。1.4GB。私の勘では、32ビットPythonには大きすぎます。32ビット浮動小数点数を使用してみてください。つまり、メモリ使用量を半分に減らすか、使用を開始してください(ほとんどの場合、情報検索の問題については良い考えです)。13057*13057*8dtype=np.floatdtype=np.float32scipy.sparse

于 2011-12-27T21:04:50.437 に答える