scipy.io.matlab.

loadmat#

scipy.io.matlab.loadmat(file_name, mdict=None, appendmat=True, *, spmatrix=True, **kwargs)[源代码]#

加载 MATLAB 文件。

参数:
file_namestr

mat 文件的名称(如果 appendmat==True,则不需要 .mat 扩展名)。 也可以传递类似文件的打开对象。

mdictdict,可选

要在其中插入 matfile 变量的字典。

appendmatbool,可选

如果给定的文件名末尾还没有 .mat 扩展名,则为 True 将其添加到末尾。 默认为 True。

spmatrixbool,可选(默认:True)

如果 True,返回稀疏的 coo_matrix。 否则返回 coo_array。 仅与稀疏变量相关。

byte_orderstr 或 None,可选

默认为 None,表示从 mat 文件猜测字节顺序。 否则可以是(‘native’,‘=’,‘little’,‘<’,‘BIG’,‘>’)之一。

mat_dtypebool,可选

如果为 True,则返回与加载到 MATLAB 中相同的 dtype 的数组(而不是保存它们的 dtype)。

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 记录数组,或者加载为 dtype=object 的旧式 NumPy 数组。 将此标志设置为 False 可复制 scipy 版本 0.7.x 的行为(返回 NumPy 对象数组)。 默认设置为 True,因为它允许更轻松地往返加载和保存 MATLAB 文件。

verify_compressed_data_integritybool,可选

是否应检查 MATLAB 文件中压缩序列的长度,以确保它们不超过我们的预期。 建议启用此功能(默认设置),因为 MATLAB 文件中过长的压缩序列通常表示这些文件已遇到某种损坏。

variable_namesNone 或序列

如果为 None(默认值)- 读取文件中的所有变量。 否则,variable_names 应该是一个字符串序列,给出要从文件中读取的 MATLAB 变量的名称。 读取器将跳过名称不在该序列中的任何变量,从而可能节省一些读取处理。

simplify_cellsFalse,可选

如果为 True,则返回简化的字典结构(如果 mat 文件包含单元格数组,则此功能很有用)。 请注意,这仅影响结果的结构,而不影响其内容(对于两种输出结构而言,内容是相同的)。 如果为 True,这将自动将 struct_as_record 设置为 False,并将 squeeze_me 设置为 True,这是简化单元格所必需的。

uint16_codecstr,可选

用于解码存储为 uint16 值的字符的编解码器。 默认使用系统编码,但是可以将其手动设置为其他值,例如“ascii”,“latin1”和“utf-8”。 此参数仅与存储为 v6 及更高版本的文件相关,而与存储为 v4 的文件无关。

返回:
mat_dictdict

字典,变量名作为键,加载的矩阵作为值。

说明

支持 v4 (Level 1.0)、v6 和 v7 至 7.2 的 mat 文件。

您需要一个 HDF5 Python 库才能读取 MATLAB 7.3 格式的 mat 文件。 由于 SciPy 不提供,因此我们此处不实现 HDF5 / 7.3 接口。

示例

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

从 tests/data 目录中获取示例 .mat 文件的文件名。

>>> 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 来禁用此功能。

获取包含名为 teststruct 的 MATLAB 结构体的示例 .mat 文件的文件名,并加载内容。

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

获取 MATLAB 结构体中第一个元素的“stringfield”。

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

获取“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])