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
相关产品推荐
相关产品推荐

