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

如何将含161×161结构体的1×1 .mat文件转换为numpy数组

解决.mat结构体转NumPy数组的方法

核心步骤

scipy.loadmat加载带结构体的.mat文件时,会生成嵌套的字典和数组结构,需要逐层提取:

  1. 加载文件并定位结构体数组
    先加载文件,通过打印mat_data.keys()找到存储结构体的顶级键,再提取出161×161的结构体数组:

    from scipy.io import loadmat
    import numpy as np
    
    # 替换为你的.mat文件路径
    mat_data = loadmat("your_file.mat")
    # 查看所有顶级键,找到结构体对应的键(比如可能是'data'或自定义名称)
    print(mat_data.keys())
    # 提取1×1矩阵中的161×161结构体数组
    struct_array = mat_data["your_struct_key"][0, 0]
    
  2. 提取结构体字段生成NumPy数组
    结构体的每个字段会被包装成(1,1)的数组,需要用[0,0]取出实际值。假设结构体的目标字段名为target_field,可以通过遍历或列表推导转换:

    # 方法1:嵌套循环填充数组
    result = np.zeros(struct_array.shape, dtype=np.float64)
    for i in range(struct_array.shape[0]):
        for j in range(struct_array.shape[1]):
            result[i, j] = struct_array[i, j]["target_field"][0, 0]
    
    # 方法2:更简洁的列表推导
    result = np.array([
        [struct_array[i,j]["target_field"][0,0] for j in range(struct_array.shape[1])]
        for i in range(struct_array.shape[0])
    ])
    

关键注意事项

  • 必须确认结构体的字段名称(可以通过print(struct_array[0,0].dtype.names)查看所有字段)
  • 如果结构体包含多个字段,可重复上述步骤为每个字段生成独立的NumPy数组
  • 若字段本身是数组而非单个值,直接提取struct_array[i,j]["target_field"]即可(无需加[0,0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:12:50