scipy.io.loadmat

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

加载MATLAB文件。

参数
file_name应力

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

mdictDICT,可选

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

appendmat布尔值,可选

为True,则将.mat扩展名附加到给定文件名的末尾(如果尚未存在)。

byte_order字符串或无,可选

默认情况下无,表示从MAT文件猜测的字节顺序。否则可以是(‘NATIVE’,‘=’,‘Little’,‘<’,‘BIG’,‘>’)之一。

mat_dtype布尔值,可选

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

squeeze_me布尔值,可选

是否压缩单位矩阵维数。

chars_as_strings布尔值,可选

是否将字符数组转换为字符串数组。

matlab_compatible布尔值,可选

返回将由MATLAB加载的矩阵(表示挤压_me=FALSE,CHARS_AS_STRINGS=FALSE,MAT_DTYPE=TRUE,STRUT_AS_RECORD=TRUE)。

struct_as_record布尔值,可选

是将MATLAB结构作为NumPy记录数组加载,还是作为带有dtype=object的旧式NumPy数组加载。将此标志设置为false将复制Scipy版本0.7.x的行为(返回NumPy对象数组)。默认设置为True,因为它允许更轻松地往返加载和保存MATLAB文件。

verify_compressed_data_integrity布尔值,可选

是否应该检查MATLAB文件中压缩序列的长度,以确保它们不会比我们预期的要长。建议启用此选项(默认设置),因为MATLAB文件中过长的压缩序列通常表示文件已经历某种损坏。

variable_names无或顺序

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

simplify_cellsFalse,可选

如果为True,则返回简化的dict结构(如果MAT文件包含单元格阵列,则此结构非常有用)。请注意,这只会影响结果的结构,而不会影响其内容(这对于两个输出结构都是相同的)。如果为True,则自动设置 struct_as_record 到假的和假的 squeeze_me 设置为True,这是简化单元格所必需的。

退货
mat_dictDICT

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

注意事项

支持v4(1.0级)、v6、v7至7.2 matfile。

您需要一个HDF5 Python库来读取MATLAB 7.3格式的MAT文件。因为SciPy不提供接口,所以我们在这里没有实现HDF5/7.3接口。

示例

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

从test/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)

结果是一个字典,每个变量对应一个键/值对:

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

获取包含名为的MATLAB结构的示例.mat文件的文件名 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结构的大小,而不是任何特定字段中的元素数量。除非可选参数为 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维的内容,并从“复合字段”中获取该项。

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