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

MatLab中动态调用gather()函数执行失败的解决方案咨询

Matlab动态引用结构体字段调用gather()失败的解决方法

问题根因

你的错误和gather函数本身无关,问题出在结构体字段的引用方式:Matlab中结构体.变量名的写法会把变量名当做固定的字段名字面量,不会解析为你之前定义的字符串变量的值,所以你实际尝试访问的是datasets下名为current_filename的字段,而不是对应文件名的动态字段。
另外注意你代码中load的结果存储在data变量中,后续引用却用了datasets,如果是笔误需要同步修正变量名。

可行解决方法

使用Matlab提供的动态字段引用语法,将字符串变量用圆括号包裹即可实现动态取字段:

情况1:字段名和文件名(带.mat后缀)完全一致

修正后代码如下:

for index_1 = 1:1:document_count
  current_filename = "random_file"+index_1+".mat";
  data = load(current_filename);
  % 用圆括号包裹字符串变量实现动态字段引用
  pci = gather(data.(current_filename).pci.dist);
end 

情况2:.mat文件中的字段名不带.mat后缀

需要先裁剪掉文件名的后缀再做引用:

for index_1 = 1:1:document_count
  current_filename = "random_file"+index_1+".mat";
  data = load(current_filename);
  % 提取不带后缀的文件名作为字段名
  [~, field_name] = fileparts(current_filename);
  pci = gather(data.(field_name).pci.dist);
end 

如果你的数据确实是存储在全局的datasets结构体下而非load返回的data中,只需要把上面代码中的data替换为datasets即可,动态字段的引用逻辑不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:18:02