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