Python读取MATLAB timeseries格式.mat文件失败求解决方案
解决Python读取MATLAB timeseries类型.mat文件的问题
问题背景
使用scipy.io.loadmat读取普通.mat数据时能正常获取数值,但读取包含MATLAB timeseries类型的文件时,得到的是MatlabOpaque对象,无法直接提取时间序列的数值数据。
解决方案
方法1:先在MATLAB中转存为普通数组
如果能访问MATLAB,这是最直接的方式:
% 加载原timeseries文件 ts_data = load('assets/timeseries_data.mat'); % 提取timeseries的核心数据和时间向量 raw_data = ts_data.test2.Data; time_vector = ts_data.test2.Time; % 保存为普通.mat文件 save('assets/converted_timeseries.mat', 'raw_data', 'time_vector');
之后在Python中用scipy.io.loadmat读取转换后的文件,就能像读取普通数据一样直接获取数组:
import scipy.io import numpy as np mat_data = scipy.io.loadmat('assets/converted_timeseries.mat') print(mat_data['raw_data']) print(mat_data['time_vector'])
方法2:使用mat4py库直接解析
mat4py对MATLAB的timeseries类型有原生支持,无需提前转换:
- 安装库:
pip install mat4py
- 读取代码:
from mat4py import loadmat mat_data = loadmat('assets/timeseries_data.mat') # 提取timeseries的数据和时间(变量名对应MATLAB中的timeseries名称,这里是test2) timeseries_data = mat_data['test2']['Data'] timeseries_time = mat_data['test2']['Time'] print(timeseries_data) print(timeseries_time)
方法3:用h5py读取HDF5格式的.mat文件
如果你的.mat文件是MATLAB 7.3及以上版本(HDF5格式),可以用h5py直接访问内部结构:
- 安装库:
pip install h5py
- 读取代码:
import h5py with h5py.File('assets/timeseries_data.mat', 'r') as f: # 查看文件内的所有键,确认timeseries的路径 print("文件内的键:", list(f.keys())) # 提取数据和时间(路径需根据实际结构调整) data = f['test2']['Data'][()] time = f['test2']['Time'][()] # MATLAB是列优先,转置后符合Python的数组习惯 data = data.T time = time.T print(data) print(time)
说明
scipy.io.loadmat对MATLAB的MCOS(MATLAB类对象)支持有限,会将timeseries这类对象转为MatlabOpaque,无法直接解析内部数据,因此需要借助上述方法处理。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

