Частичная загрузка файлов matlab (.mat) -v7 в python

У меня большой набор matlab файлы данных файлы, которые мне нужно получить доступ в Python, Файлы были сохранены с использованием save с -v6 или же -v7 вариант, но не -v7.3,

Я должен прочитать только одно числовое значение из каждого файла, файлов много (100 КБ +) и относительно большой (1 МБ +). Поэтому я трачу 99% времени на холостом ходу в операциях ввода-вывода, которые бесполезны.

Я ищу что-то вроде частичной загрузки, которая возможна для файлов -v7.3 с использованием библиотеки HDF5.

Пока что я использую scipy.io.loadmat API.

Документация гласит:

v4 (Level 1.0), v6 and v7 to 7.2 matfiles are supported.
You will need an HDF5 python library to read matlab 7.3 format mat files. 
Because scipy does not supply one, we do not implement the HDF5 / 7.3 interface here.

https://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html

Но похоже, что он не допускает частичной загрузки.

У кого-нибудь есть опыт реализации такой функции, или кто-нибудь знает, как анализировать эти файлы.mat на более низком уровне?

Я думаю, fseekподобный подход возможен, когда структура известна

1 ответ

Использование variable_names Параметр, если вы хотите прочитать одну переменную:

d = loadmat(filename, variable_names=['variable_name'])

затем получите к нему доступ следующим образом:

d['variable_name']

ОБНОВЛЕНИЕ: если вам нужен только первый элемент массива / матрицы, вы можете сделать это:

val = loadmat(filename, variable_names=['var_name']).get('var_name')[0, 0]

ПРИМЕЧАНИЕ: он все равно будет считывать всю переменную в память, но будет удален после того, как первый элемент назначен val,

Другие вопросы по тегам