You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中访问MATLAB .mat文件中的所有嵌套结构体?

解决.mat大文件嵌套结构体的部分读取问题

方法1:用scipy的MatFile懒加载读取

scipy的MatFile类支持按需读取结构体成员,不会一次性加载整个大文件。代码示例:

from scipy.io import matlab

with matlab.MatFile('/path/to/your/file.mat') as mat_file:
    # 仅获取外层结构体对象(不加载全部数据)
    struct1 = mat_file['struct1']
    # 读取第一层成员
    member1 = struct1['member1']
    # 读取嵌套的子成员
    member2 = struct1['member2']
    target_data = member2['data1']
    # 如果需要转为numpy数组,再执行转换
    target_data_np = target_data[()]

这个方式的核心是懒加载,只有当你访问具体成员时,才会从文件中读取对应的数据块。

方法2:用h5py直接操作(适用于MATLAB 7.3及以上版本的.mat文件)

如果你的.mat文件是MATLAB 7.3或更高版本保存的(本质是HDF5格式),可以用h5py直接按路径访问嵌套结构:

import h5py

with h5py.File('/path/to/your/file.mat', 'r') as h5_file:
    # 直接通过层级路径访问目标数据
    target_data = h5_file['struct1']['member2']['data1']
    # 转为numpy数组(按需执行)
    target_data_np = target_data[()]

HDF5格式的.mat文件会将结构体组织为嵌套的分组,h5py可以精准定位到你需要的子数据,完全不需要加载无关内容。

方法3:用MATLAB预处理(如果有MATLAB环境)

如果能使用MATLAB,最直接的方式是提前提取需要的子结构,保存为小文件:

% 仅加载外层结构体
load('large_file.mat', 'struct1');
% 提取目标子数据
target_data = struct1.member2.data1;
% 保存为独立小文件
save('target_data.mat', 'target_data');

之后直接读取这个小文件即可,彻底避开大文件的嵌套读取问题。

内容的提问来源于stack exchange,提问作者Pablo Tarodo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:19:57