Можно ли читать двоичные файлы MATLAB .mat в Python?
Я видел, что SciPy якобы поддерживает чтение файлов .mat, но мне это не удается. Я установил SciPy версии 0.7.0 и не могу найти loadmat()
метод.
Требуется импорт, import scipy.io
...
import scipy.io
mat = scipy.io.loadmat('file.mat')
save('myfile.mat','-v7')
Ни
scipy.io.savemat
, ниscipy.io.loadmat
работать для массивов MATLAB версии 7.3. Но хорошо то, что файлы MATLAB версии 7.3 являются наборами данных hdf5. Таким образом, их можно прочитать с помощью ряда инструментов, включая NumPy .Для Python вам понадобится
h5py
расширение, которое требует HDF5 в вашей системе.источник
save
(по крайней мере, в Matlab R2014b) приводит к файлу, который не может быть прочитан с использованием описанной выше техники. Если вы используете флаг '-v7.3', числовые данные могут быть прочитаны очень хорошо.save('filename', '-v7.3', 'var1');
Сначала сохраните файл .mat как:
После этого в Python используйте обычную
loadmat
функцию:источник
Есть хороший пакет,
mat4py
который можно легко установить с помощьюЭто просто использовать (с сайта):
Загрузить данные из MAT-файла
Функция
loadmat
загружает все переменные, хранящиеся в MAT-файле, в простую структуру данных Python, используя только Pythondict
иlist
объекты. Числовые массивы и массивы ячеек преобразуются в упорядоченные вложенные списки. Массивы сжимаются, чтобы исключить массивы только с одним элементом. Результирующая структура данных состоит из простых типов, совместимых с форматом JSON .Пример: загрузка MAT-файла в структуру данных Python:
Переменная
data
- этоdict
переменные и значения, содержащиеся в MAT-файле.Сохранить структуру данных Python в MAT-файл
Данные Python могут быть сохранены в MAT-файл с помощью функции
savemat
. Данные должны быть структурированы таким же образом , как и дляloadmat
, т.е. она должна состоять из простых типов данных, какdict
,list
,str
,int
, иfloat
.Пример: сохранить структуру данных Python в MAT-файл:
Параметр
data
должен бытьdict
с переменными.источник
mat4py/cmd.py my.mat
пишетmy.json
, 1 длинная строка.)mat4py.loadmat.ParseError: Can only read from Matlab level 5 MAT-files
Установив MATLAB 2014b или новее, движок MATLAB для Python можно использовать:
источник
Чтение файла
Проверка типа переменной MAT
В ключах внутри словаря являются MATLAB переменными , и значения являются объектами , назначенными для этих переменных .
источник
Существует также движок MATLAB для Python от самой MathWorks. Если у вас есть MATLAB, об этом стоит подумать (я сам не пробовал, но у него гораздо больше функциональности, чем просто чтение файлов MATLAB). Тем не менее, я не знаю, разрешено ли распространять его среди других пользователей (вероятно, это не проблема, если у этих людей есть MATLAB. В противном случае, возможно, NumPy - правильный путь?).
Кроме того, если вы хотите сделать все основы самостоятельно, MathWorks предоставляет (если ссылка поменяется, попробуйте поискать в Google
matfile_format.pdf
или ее заголовокMAT-FILE Format
) подробную документацию о структуре формата файла. Это не так сложно, как я лично думал, но, очевидно, это не самый простой путь. Это также зависит от того, сколько функций.mat
-файлов вы хотите поддерживать.Я написал «маленький» (около 700 строк) скрипт на Python, который может читать некоторые базовые
.mat
файлы. Я не эксперт по Python и не новичок, и на его написание у меня ушло около двух дней (с использованием документации MathWorks, ссылки на которую приведены выше). Я узнал много нового, и это было довольно весело (большую часть времени). Поскольку я написал скрипт Python на работе, я боюсь, что не могу его опубликовать ... Но я могу дать здесь несколько советов:.mat
файл- ссылку, который вы хотите проанализировать.miCOMPRESSED
,miMATRIX
,mxDOUBLE
илиmiINT32
).mat
-files оптимальна для сохранения элементов данных в древовидной структуре данных; каждый узел имеет один класс и подузлыисточник
Вы можете использовать приведенный выше код для чтения сохраненного файла .mat по умолчанию в Python.
источник