Читать.mat файлы в Python
есть ли у кого-нибудь успешный опыт чтения двоичного Matlab .mat файлы в Python?
(Я видел это scipy
якобы поддерживает чтение .mat файлы,но я неудачно с ним. Я установил scipy
версия 0.7.0, и я не могу найти loadmat()
способ)
8 ответов:
ни
scipy.io.savemat
, ни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 engine для Python можно использовать:
import matlab.engine eng = matlab.engine.start_matlab() content = eng.load("example.mat",nargout=1)
есть еще Matlab Engine для Python самим MathWorks. Если у вас есть Matlab, это может быть стоит рассмотреть (я не пробовал его сам, но он имеет гораздо больше функциональности, чем просто чтение файлов Matlab). Однако я не знаю, разрешено ли распространять его другим пользователям (вероятно, нет проблем, если у этих людей есть Matlab, иначе, возможно, NumPy-это правильный путь?).
кроме того, если вы хотите сделать все основы самостоятельно, MathWorks предоставляет (если ссылка изменится, попробуйте google для
matfile_format.pdf
или ее названиеMAT-FILE Format
) подробная документация по структуре формата файла. Это не так сложно, как я лично думал, но, очевидно, это не самый простой способ пойти. Это также зависит от того, сколько функций.mat
-файлы, которые вы хотите поддержать.я написал" маленький " (около 700 строк) скрипт Python, который может читать некоторые основные
.mat
-файлы. Я не эксперт по питону и не новичок и мне потребовалось около двух дней, чтобы написать его (используя документацию MathWorks, связанную выше). Я узнал много нового, и это было довольно весело (большую часть времени). Поскольку я написал скрипт Python на работе, я боюсь, что не смогу его опубликовать... Но я могу дать несколько советов:
- сначала прочитайте документацию
- используйте шестнадцатеричный редактор (например,HxD) и посмотрите в ссылку
.mat
-файл, который вы хотите парсить- попробуйте выяснить значение каждого байта, сохраняя байты в txt-файл и аннотировать каждую строку
- используйте классы для сохранения каждого элемента данных (например,
miCOMPRESSED
,miMATRIX
,mxDOUBLE
илиmiINT32
)- The
.mat
-структура файлов оптимальна для сохранения элементов данных в древовидной структуре данных; каждый узел имеет один класс и подузлы
чтение файла
import scipy.io mat = scipy.io.loadmat(file_name)
Инсектирование типа переменной mat
print(type(mat)) #OUTPUT - <class 'dict'>
The ключи внутри словаря переменные 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'sdict
и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
с переменными.