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

如何正确加载.mat文件并访问其中的子变量?

解决.mat文件加载后void数组的读取问题

查看文件内所有变量

先通过keys()遍历所有顶层变量,过滤掉scipy自动生成的__header__、__version__、__globals__:

from scipy.io import loadmat
matFile = loadmat('myFile.mat')

# 打印所有实际变量
for key in matFile.keys():
    if not key.startswith('__'):
        print(key)

解析void类型数组(MATLAB结构体)

你拿到的void320(1,1)是MATLAB结构体被scipy加载后的特殊格式,按以下方式提取数据:

直接提取结构体字段

先通过.item()取出(1,1)数组里的结构体元素,再查看字段、访问数据:

# 取出结构体对象
walking_struct = matFile['Walking'].item()
# 查看结构体的所有字段名
print(walking_struct.dtype.names)
# 访问具体字段,比如假设字段叫'time_series'
walking_data = walking_struct['time_series']

转成Python字典(适合嵌套结构体)

如果结构体有多层嵌套,转成字典会更方便访问:

def mat_struct_to_dict(arr):
    """把scipy加载的MATLAB结构体转成Python字典"""
    struct_item = arr.item()
    result = {}
    for field in struct_item.dtype.names:
        val = struct_item[field]
        # 如果子字段还是结构体,递归转换
        if val.dtype.kind == 'V':
            result[field] = mat_struct_to_dict(val)
        # 把(1,N)的一维数组转成普通一维数组
        elif val.ndim == 2 and val.shape[0] == 1:
            result[field] = val.flatten()
        else:
            result[field] = val
    return result

# 转换后直接用字典键访问
walking_dict = mat_struct_to_dict(matFile['Walking'])
print(walking_dict.keys())
# 比如访问子变量:walking_dict['step_count']

处理单元格数组(cell array)

如果Walking是MATLAB的单元格数组,加载后会是object类型数组,同样用.item()提取:

walking_cell = matFile['Walking'].item()
# 访问第一个单元格的内容
first_cell_data = walking_cell[0]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:20:29