将含多数组的MATLAB .mat文件转换为NumPy数组的问题
解决.mat文件嵌套数组转NumPy数组的方案
1. 先确认嵌套结构的类型
scipy.io.loadmat加载Matlab的struct后,会返回(1,1)形状的NumPy结构化数组,你可以先打印结构信息确认:
# 查看fanmap的类型和形状 print(type(mat['fanmap'])) print(mat['fanmap'].shape) # 查看内部第一个元素的结构 print(mat['fanmap'][0,0])
2. 提取fanmap中的所有数组
直接遍历结构化数组的字段,提取每个字段对应的NumPy数组:
# 取出fanmap的结构体内容 fanmap_struct = mat['fanmap'][0,0] # 获取所有字段名称 fanmap_fields = fanmap_struct.dtype.names # 提取所有数组到列表 fanmap_arrays = [] for field in fanmap_fields: arr = fanmap_struct[field] fanmap_arrays.append(arr) # 可选:打印每个数组的形状验证 print(f"字段 {field} 的形状: {arr.shape}")
3. 提取fanmap1D中的所有数组
用同样的逻辑处理fanmap1D:
fanmap1D_struct = mat['fanmap1D'][0,0] fanmap1D_fields = fanmap1D_struct.dtype.names fanmap1D_arrays = [] for field in fanmap1D_fields: arr = fanmap1D_struct[field] fanmap1D_arrays.append(arr) print(f"字段 {field} 的形状: {arr.shape}")
4. 可选:用字典存储数组(方便后续调用)
如果需要按字段名快速调用数组,可以把提取结果存到字典里:
fanmap_dict = {field: fanmap_struct[field] for field in fanmap_fields} fanmap1D_dict = {field: fanmap1D_struct[field] for field in fanmap1D_fields} # 示例:调用fanmap里的某个数组 # print(fanmap_dict['你的字段名'])
关键说明
从Matlab struct提取出的arr本身就是NumPy数组,不需要额外转换——scipy.io.loadmat已经帮你完成了类型转换,你只需要把嵌套结构里的数组逐一提取出来即可。
内容的提问来源于stack exchange,提问作者umich
相关产品推荐
相关产品推荐

