Читать.файлы mat в Python

кто-нибудь имеет успешный опыт чтения двоичного Matlab .файлы mat в Python?

(Я видел это scipy якобы поддерживает чтение .mat files, но мне это не удается. Я установил scipy версия 0.7.0, и я не могу найти loadmat() способ)

8 ответов


глупая я. Забыл импортировать io...

import scipy.io
mat = scipy.io.loadmat('file.mat')

ни 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 с переменными.