Я использую следующий код, чтобы попытаться загрузить файл MAT в Python. Я могу загрузить его без проблем в MATLAB.Почему загрузчик SciPy бросает MemoryError при чтении структуры Matlab на 200 МБ
from scipy.io import loadmat
test_filename = 'test_data.mat' #This is a struct
data =loadmat(test_filename, struct_as_record=True)
Запуск этого кода производит эту ошибку:
Traceback (most recent call last):
File "C:\Users\mac389\workspace\nexUtils\src\qA.py", line 16, in <module>
data =loadmat(test_filename, struct_as_record=True)
File "C:\Python27\lib\site-packages\scipy\io\matlab\mio.py", line 175, in loadmat
matfile_dict = MR.get_variables(variable_names)
File "C:\Python27\lib\site-packages\scipy\io\matlab\mio5.py", line 272, in get_variables
hdr, next_position = self.read_var_header()
File "C:\Python27\lib\site-packages\scipy\io\matlab\mio5.py", line 224, in read_var_header
stream = BytesIO(dcor.decompress(data))
MemoryError
Для справки, test_data.mat является структурой со следующими полями (из MATLAB консоли):
version: 101
comment: 'molecular layer 4/17'
freq: 40000
tbeg: 0
tend: 1.3950e+003
events: {3x1 cell}
neurons: {50x1 cell}
waves: {102x1 cell}
contvars: {64x1 cell}
Test_data.mat составляет 217 МБ. У меня 4 ГБ ОЗУ. Я использую SciPy 0.10.0 и NumPy 1.6.1. Изменение поля 'struct_as_record' ничего не делает.
Как я могу загрузить структуру, где поля являются массивами ячеек?
У вас закончилась память. Хотя файл может быть только 200 МБ, требования к памяти могут быть значительно больше. –
Сжат ли файл .mat? Является ли процесс Python 32-битным? Является ли ваш процесс MATLAB 64-битным? –
@David: Файл мата больше не сжат за двоичным форматом Matlab. Оба процесса 32 бит. Мой вопрос в том, почему загрузка небольшого файла сбрасывает память в Python, но не в Matlab, и что я могу сделать, чтобы обойти это. – mac389