ошибка памяти loadmat python

Я новичок в Python и хочу импортировать в него структуру Matlab размером 850M. Я использую «loadmat», но получаю ошибку памяти:

return self._matrix_reader.array_from_header(header, process)
  File "mio5_utils.pyx", line 624, in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy\io\matlab\mio5_utils.c:5401)
  File "mio5_utils.pyx", line 653, in scipy.io.matlab.mio5_utils.VarReader5.array_from_header (scipy\io\matlab\mio5_utils.c:4849)
  File "mio5_utils.pyx", line 706, in scipy.io.matlab.mio5_utils.VarReader5.read_real_complex (scipy\io\matlab\mio5_utils.c:5578)
  File "mio5_utils.pyx", line 424, in scipy.io.matlab.mio5_utils.VarReader5.read_numeric (scipy\io\matlab\mio5_utils.c:3439)
  File "mio5_utils.pyx", line 360, in scipy.io.matlab.mio5_utils.VarReader5.read_element (scipy\io\matlab\mio5_utils.c:3164)
  File "streams.pyx", line 76, in scipy.io.matlab.streams.GenericStream.read_string (scipy\io\matlab\streams.c:1408)
MemoryError

Я использую python 3.2 на Windows XP с 3,5 ГБ ОЗУ. Вот мой код:

from scipy.io import matlab as mio
mat = mio.loadmat(DIR + '/input.mat')

Не могли бы вы помочь мне и сказать мне, что я должен сделать, чтобы исправить это?


person danseuse    schedule 12.11.2012    source источник


Ответы (1)


Вы, вероятно, используете 32-битный Python. Максимальный предел для всех 32-битных программ (эта проблема на самом деле не имеет ничего общего с Python или Scipy) составляет 2 ГБ --- сколько памяти у вас установлено на машине не имеет значения. На практике выделение больших объектов начинает давать сбой уже раньше, из-за фрагментации виртуальной памяти (и, как правило, ожидается ~800 МБ).

Решением будет использование 64-битного Python вместо 32-битного. Для этого вам понадобится 64-битная операционная система, такая как Windows 7 или Linux.

Однако, если вы застряли с 32-разрядной версией Windows XP, есть некоторые приемы для увеличения ограничения 32-разрядной памяти до 3 ГБ в 32-разрядных системах, которые могут здесь помочь.

person pv.    schedule 12.11.2012