scipy.io.loadmat возвращает ошибку памяти для больших структур matlab

#python #matlab #scipy #32-bit

#python #matlab #scipy #32-разрядный

Вопрос:

Я хочу открыть и обработать некоторые большие файлы .mat на python. Функция scipy.io.loadmat идеально подходит для этой цели. Однако функция возвращает ошибку памяти, когда файлы .mat большие. Проблема может быть связана с версией python, которую я использую (32-разрядный Python 2.7.10, связанный с spyder). Эта проблема уже поднималась, но я не могу найти достойного решения. В идеале я мог бы открывать эти файлы, не меняя свой python. Есть ли способ заставить функцию scipy.io.loadmat загружать только некоторые переменные, содержащиеся в файле .mat?

Ответ №1:

Смотрите документацию здесь: http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html

Вы можете передать список имен переменных для чтения из файла:

 scipy.io.loadmat("myfile.mat", variable_names=["myvar1", "myvar2"]) 
  

Комментарии:

1. Спасибо. Обратите внимание, однако, что этот трюк не является подходящим решением в долгосрочной перспективе. Есть идеи, как избавиться от этой ошибки памяти?

2. Что вы имеете в виду? В чем проблема в долгосрочной перспективе?

3. Мы должны иметь возможность открывать любые файлы .mat с помощью функции scipy.io.loadmat(), независимо от размера файла. Сейчас это не так. Я систематически получаю ошибки памяти при попытке открыть файлы .mat> .1 ГБ

4. Являются ли эти файлы, которые вы создаете на том же компьютере и / или можете открыть MATLAB? Какая структура MATLAB? В основном матрицы или множество ячеек и структур?

5. Matlab открывает эти файлы без каких-либо проблем. Они содержат объекты double и struct . Например, в одном файле данных у меня есть 15 двойных объектов размером 205×6001 (байт ~ 9841600 для каждого двойного).