如何正确加载.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
相关产品推荐
相关产品推荐

