Ошибка памяти при использовании scipy для SVD - PullRequest
0 голосов
/ 28 декабря 2011

Я пытался использовать LSI для генерации векторов для представления документов. Я использую пакет svd в библиотеке Scipy. Но программа выдает ошибку памяти. Размер моей матрицы 100 * 13057. Это слишком большой для моей 8G RAM?

Я искал эту проблему в стеке. Кто-то сказал, что мне просто нужно установить 64-битный Python на мою 64-битную ОС. (Теперь у меня есть 32-битный Python на 64-битной ОС). Но переустановить все библиотеки слишком тривиально. Другое мнение, чтобы преобразовать разреженную матрицу.

Так у всех есть идеи по этой проблеме? Спасибо!

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 следующее:

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

1 Ответ

0 голосов
/ 28 декабря 2011

Ваша матрица V займет 13057*13057*8 байтов памяти, если вы используете значение по умолчанию dtype=np.float, что составляет прибл. 1.4GB. Я догадываюсь, что это слишком много для вашего 32-битного Python. Попробуйте использовать 32-разрядные числа с плавающей запятой, то есть dtype=np.float32, чтобы сократить использование памяти пополам, или начните использовать scipy.sparse (почти всегда хорошая идея для проблем с поиском информации).

...