Читать.файлы mat в Python
8 ответов
ни scipy.io.savemat
, nor scipy.io.loadmat
работа для массивов matlab --v7.3. Но хорошая часть заключается в том, что matlab --v7.3 файла-это наборы данных hdf5. Таким образом, их можно прочитать с помощью ряда инструментов, включая numpy.
для python вам понадобится h5py
расширение, которое требует HDF5 в вашей системе.
import numpy as np
import h5py
f = h5py.File('somefile.mat','r')
data = f.get('data/variable1')
data = np.array(data) # For converting to numpy array
я прикрутил полчаса даже после прочтения ответов. Надеюсь, этот ответ поможет
сначала сохраните файл mat как
save('test.mat','-v7')
после этого в Python используйте обычный loadmat
import scipy.io as sio
test = sio.loadmat('test.mat')
имея Matlab 2014b или более новую версию,движок Matlab для Python можно использовать:
import matlab.engine
eng = matlab.engine.start_matlab()
content = eng.load("example.mat",nargout=1)
есть еще движок MATLAB для Python самим MathWorks. Если у вас есть Matlab, это может стоить рассмотреть (я сам не пробовал, но у него намного больше функциональности, чем просто чтение файлов Matlab). Однако я не знаю, разрешено ли распространять его другим пользователям (вероятно, нет проблем, если у этих людей есть Matlab, иначе, возможно, NumPy-правильный путь?).
кроме того, если вы хотите сделать все основы самостоятельно, MathWorks предоставляет (если ссылка изменится, попробуйте google для matfile_format.pdf
или ее название MAT-FILE Format
) подробная документация по структуре формата файла. Это не так сложно, как я лично думал, но, очевидно, это не самый простой способ пойти. Это также зависит от того, сколько функций .mat
-файлы, которые вы хотите поддержать.
я написал" маленький " (около 700 строк) скрипт Python, который может читать некоторые основные .mat
-файлы. Я не эксперт по Python и не новичок и мне потребовалось около двух дней, чтобы написать его (используя документацию MathWorks, связанную выше). Я узнал много нового, и это было довольно весело (большую часть времени). Поскольку я написал скрипт Python на работе, боюсь, я не могу его опубликовать... Но я могу дать несколько советов:
- сначала прочитайте документацию
- используйте шестнадцатеричный редактор (например,HxD) и посмотрите в ссылку
.mat
-файл, который вы хотите парсить - попробуйте выяснить значение каждого байта путем сохранения байтов в txt-файл и аннотирования каждой строки
- используйте классы для сохранения каждого элемента данных (например,
miCOMPRESSED
,miMATRIX
,mxDOUBLE
илиmiINT32
) - на
.mat
- структура файлов оптимальна для сохранения элементов данных в древовидной структуре данных; каждый узел имеет один класс и подузлы
чтение файла
import scipy.io
mat = scipy.io.loadmat(file_name)
Insecting тип переменной мат
print(type(mat))
#OUTPUT - <class 'dict'>
на ключи внутри словаря переменные matlab и значения это объекты, назначенные этим переменным.
hdf5 файлы также могут быть обработаны с помощью PyTables. Их FAQ имеет запись, которая сравнивает с h5py:https://pytables.github.io/FAQ.html . PyTables также поставляется с удобным визуализатором ViTables:http://vitables.org/galleries/Screenshots/
есть хороший пакет под названием mat4py
который можно легко установить с помощью
pip install mat4py
он прост в использовании (с веб-сайта):
загрузить данные из MAT-файла
функции loadmat
загружает все переменные, хранящиеся в MAT-файле, в простую структуру данных Python, используя только Python dict
и list
объекты. Числовые и сотовые массивы преобразуются в упорядоченные по строкам вложенные списки. Массивы сжал, чтобы устранить массивы только с одним элементом. Результирующая структура данных состоит из простых типов, совместимых с .
пример: загрузите MAT-файл в структуру данных Python:
data = loadmat('datafile.mat')
переменная data
это dict
с переменными и значениями, содержащимися в MAT-файле.
сохранить структуру данных Python в MAT-файл
данные Python можно сохранить в MAT-файл, с функция savemat
. Данные должны быть структурированы так же, как и для loadmat
, т. е. она должна состоять из простых типов данных, таких как dict
, list
, str
, int
и float
.
пример: сохраните структуру данных Python в MAT-файл:
savemat('datafile.mat', data)
параметр data
должно быть dict
с переменными.