python中读写和存储matlab的.mat数据文件

sicpy.io提供了两个函数loadmat和savemat, 可以用于读取和存储.mat格式文件,非常方便。此外,该模块还提供了whosmat函数,用于列出mat文件中的变量信息。

函数 描述
loadmat(file_name[, mdict, appendmat]) 读取.mat 文件
savemat(file_name, mdict[, appendmat, …]) Save a dictionary of names and arrays into a MATLAB-style .mat file.
whosmat(file_name[, appendmat]) List variables inside a MATLAB file.

一、 loadmat

loadmat用于载入.mat 格式文件,接口调用方式
scipy.io.loadmat(file_name, mdict=None, appendmat=True, **kwargs)
返回值为dict类型。

函数支持v4 (Level 1.0), v6, v7 至 7.2 格式的.mat 文件。如需读取V7.3格式的.mat 文件,需要加载HDF5 库,因为SciPy 未实现HDF5 / 7.3接口。

使用实例

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

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

mat_contents = sio.loadmat(mat_fname)
print(type(mat_contents))
print(sorted(mat_contents.keys()))
print(mat_contents['testdouble'])

在这里插入图片描述

二、savemat

savemat函数用于保存.mat 文件,函数调用方式如下
scipy.io.savemat(file_name, mdict, appendmat=True, format=‘5’, long_field_names=False, do_compression=False, oned_as=‘row’)

import scipy.io as sio
import numpy as np
a = np.arange(20)
mdic = {"a": a, "label": "experiment"}
print(mdic)

sio.savemat("matlab_matrix.mat", mdic)

三、whosmat

whosmat用于查看.mat文件中的变量信息。接口如下:
scipy.io.whosmat(file_name, appendmat=True, **kwargs)

from io import BytesIO
import numpy as np
from scipy.io import savemat, whosmat

a = np.array([[10, 20, 30], [11, 21, 31]], dtype=np.int32)
b = np.geomspace(1, 10, 5)
f = BytesIO()
savemat(f, {'a': a, 'b': b})
#  Each tuple in the output list gives the name, shape and data type of the array in f.
whosmat(f)

输出结果如下:
[(‘a’, (2, 3), ‘int32’), (‘b’, (1, 5), ‘double’)]