如何将含161×161结构体的1×1 .mat文件转换为numpy数组
解决.mat结构体转NumPy数组的方法
核心步骤
scipy.loadmat加载带结构体的.mat文件时,会生成嵌套的字典和数组结构,需要逐层提取:
加载文件并定位结构体数组
先加载文件,通过打印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]提取结构体字段生成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
相关产品推荐
相关产品推荐

