scipy.io.matlab.

loadmat#

scipy.io.matlab.loadmat(имя_файла, mdict=None, appendmat=True, *, spmatrix=True, **kwargs)[источник]#

Загрузить файл MATLAB.

Параметры:
имя_файлаstr

Имя mat-файла (не нужно расширение .mat, если appendmat==True). Также можно передать открытый файлоподобный объект.

mdictdict, optional

Словарь, в который вставляются переменные mat-файла.

appendmatbool, необязательно

True для добавления расширения .mat к имени файла, если оно ещё не присутствует. По умолчанию True.

spmatrixbool, опционально (по умолчанию: True)

Если True, возвращает разреженный coo_matrix. В противном случае возвращает coo_array. Актуально только для разреженных переменных.

byte_orderstr или None, опционально

None по умолчанию, что подразумевает угадывание порядка байтов из mat-файла. В противном случае может быть одним из ('native', '=', 'little', '<', 'BIG', '>').

mat_dtypebool, необязательно

Если True, возвращать массивы в том же типе данных, как если бы они загружались в MATLAB (вместо типа данных, с которым они сохранены).

squeeze_mebool, необязательно

Сжимать ли единичные матричные размерности или нет.

chars_as_stringsbool, необязательно

Преобразовывать ли символьные массивы в строковые массивы.

matlab_compatiblebool, необязательно

Возвращает матрицы, как если бы они были загружены MATLAB (подразумевает squeeze_me=False, chars_as_strings=False, mat_dtype=True, struct_as_record=True).

struct_as_recordbool, необязательно

Загружать ли структуры MATLAB как массивы записей NumPy или как массивы NumPy старого стиля с dtype=object. Установка этого флага в False воспроизводит поведение scipy версии 0.7.x (возвращая массивы объектов NumPy). Значение по умолчанию - True, потому что это позволяет более легкий круговой загруз и сохранение файлов MATLAB.

verify_compressed_data_integritybool, необязательно

Следует ли проверять длину сжатых последовательностей в файле MATLAB, чтобы убедиться, что они не длиннее ожидаемого. Рекомендуется включить эту опцию (по умолчанию), потому что слишком длинные сжатые последовательности в файлах MATLAB обычно указывают на то, что файлы подверглись какому-либо повреждению.

variable_namesNone или последовательность

Если None (по умолчанию) - читать все переменные в файле. В противном случае, variable_names должен быть последовательностью строк, дающих имена переменных MATLAB для чтения из файла. Читатель пропустит любую переменную с именем, не входящим в эту последовательность, возможно, экономя некоторую обработку чтения.

simplify_cellsFalse, optional

Если True, возвращает упрощённую структуру словаря (что полезно, если mat файл содержит массивы ячеек). Обратите внимание, что это влияет только на структуру результата, а не на его содержимое (которое идентично для обеих выходных структур). Если True, это автоматически устанавливает struct_as_record на False и squeeze_me в True, что требуется для упрощения ячеек.

uint16_codecstr, optional

Кодек для декодирования символов, которые хранятся как значения uint16. По умолчанию используется системная кодировка, но это можно вручную установить на другие значения, такие как 'ascii', 'latin1' и 'utf-8'. Этот параметр актуален только для файлов, сохраненных как v6 и выше, и не для файлов, сохраненных как v4.

Возвращает:
mat_dictdict

словарь с именами переменных в качестве ключей и загруженными матрицами в качестве значений.

Примечания

Поддерживаются mat-файлы версий v4 (Level 1.0), v6 и v7 до 7.2.

Вам понадобится библиотека HDF5 для Python, чтобы читать файлы mat формата MATLAB 7.3. Поскольку SciPy не предоставляет такую библиотеку, мы не реализуем интерфейс HDF5 / 7.3 здесь.

Примеры

>>> from os.path import dirname, join as pjoin
>>> import scipy.io as sio

Получить имя файла для примера .mat файла из каталога tests/data.

>>> data_dir = pjoin(dirname(sio.__file__), 'matlab', 'tests', 'data')
>>> mat_fname = pjoin(data_dir, 'testdouble_7.4_GLNX86.mat')

Загрузить содержимое файла .mat.

>>> mat_contents = sio.loadmat(mat_fname, spmatrix=False)

Результат представляет собой словарь, одна пара ключ/значение для каждой переменной:

>>> sorted(mat_contents.keys())
['__globals__', '__header__', '__version__', 'testdouble']
>>> mat_contents['testdouble']
array([[0.        , 0.78539816, 1.57079633, 2.35619449, 3.14159265,
        3.92699082, 4.71238898, 5.49778714, 6.28318531]])

По умолчанию SciPy читает структуры MATLAB как структурированные массивы NumPy, где поля dtype имеют тип object и имена соответствуют именам полей структуры MATLAB. Это можно отключить, установив необязательный аргумент struct_as_record=False.

Получить имя файла для примера .mat файла, который содержит структуру MATLAB под названием teststruct и загрузить содержимое.

>>> matstruct_fname = pjoin(data_dir, 'teststruct_7.4_GLNX86.mat')
>>> matstruct_contents = sio.loadmat(matstruct_fname)
>>> teststruct = matstruct_contents['teststruct']
>>> teststruct.dtype
dtype([('stringfield', 'O'), ('doublefield', 'O'), ('complexfield', 'O')])

Размер структурированного массива соответствует размеру структуры MATLAB, а не количеству элементов в каком-либо конкретном поле. Форма по умолчанию 2-D, если не указан дополнительный аргумент squeeze_me=True, в этом случае все размерности длины 1 удаляются.

>>> teststruct.size
1
>>> teststruct.shape
(1, 1)

Получить 'stringfield' первого элемента в структуре MATLAB.

>>> teststruct[0, 0]['stringfield']
array(['Rats live on no evil star.'],
  dtype='

Получите первый элемент 'doublefield'.

>>> teststruct['doublefield'][0, 0]
array([[ 1.41421356,  2.71828183,  3.14159265]])

Загрузить структуру MATLAB, удалив измерения длины 1, и получить элемент из 'complexfield'.

>>> matstruct_squeezed = sio.loadmat(matstruct_fname, squeeze_me=True)
>>> matstruct_squeezed['teststruct'].shape
()
>>> matstruct_squeezed['teststruct']['complexfield'].shape
()
>>> matstruct_squeezed['teststruct']['complexfield'].item()
array([ 1.41421356+1.41421356j,  2.71828183+2.71828183j,
    3.14159265+3.14159265j])