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])