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

如何通过遍历字段名将Matlab结构体转为Python列表?

从Matlab结构体循环创建Python列表的正确写法

假设你是用scipy.io.loadmat加载的Matlab数据,以下是两种常见场景的正确实现方式:

场景1:加载后的结构体是字典类型

scipy加载Matlab标量结构体时,通常需要通过[0, 0]索引取出实际的字典对象:

from scipy.io import loadmat

# 加载Matlab文件
mat_data = loadmat('你的文件.mat')
# 取出结构体(注意[0,0]是scipy加载标量结构体的常规操作)
struct_data = mat_data['你的结构体名称'][0, 0]

直接生成v1到v17的字段名并遍历提取:

# 生成v1到v17的字段名字符串列表
field_names = [f'v{i}' for i in range(1, 18)]

# 循环提取数组并构建列表
result_list = []
for field in field_names:
    result_list.append(struct_data[field])

# 或者用更简洁的列表推导式
result_list = [struct_data[f'v{i}'] for i in range(1, 18)]

场景2:加载后的结构体是numpy结构化数组

如果结构体是numpy结构化数组类型,可以先获取所有字段名,再筛选出目标字段:

# 获取结构体所有字段名,筛选出v1到v17
field_names = [name for name in struct_data.dtype.names 
               if name.startswith('v') and 1 <= int(name[1:]) <= 17]

# 遍历提取构建列表
result_list = [struct_data[name] for name in field_names]

注意事项

  • 先通过type(struct_data)确认加载后结构体的类型,再选择对应写法
  • 确保Matlab结构体中的字段名确实是v1到v17,没有拼写或格式错误
  • scipy加载的标量结构体必须加[0, 0]索引,否则会拿到一个(1,1)的数组而非实际结构体内容

内容的提问来源于stack exchange,提问作者M.D.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 09:25:25