MATLAB循环中如何为结构体字段名添加循环变量i
问题:MATLAB循环中动态引用含循环变量的结构体字段名
现有MATLAB循环代码如下,需要将循环变量i添加到结构体字段名中(例如第一次循环时,predictions(1).pred_i要变为predictions(1).pred_1):
for i = 1:length(pred_files) for j = 1:length(n_unknown) if predictions(1).pred_i.y_pred(j) == predictions(1).y_all(j) accuracy_totals(1).accuracy_total_i = accuracy_totals(1).accuracy_total_i +1 end end end
解决方案
在MATLAB中,要动态访问结构体的字段名,需通过字符串拼接生成字段名,再使用括号索引的方式访问,具体修改如下:
for i = 1:length(pred_files) % 动态生成pred字段名 pred_field = ['pred_', num2str(i)]; % 动态生成accuracy_total字段名 acc_field = ['accuracy_total_', num2str(i)]; % 初始化accuracy_total字段(避免未定义报错) if ~isfield(accuracy_totals(1), acc_field) accuracy_totals(1).(acc_field) = 0; end for j = 1:length(n_unknown) % 动态访问pred字段下的y_pred if predictions(1).(pred_field).y_pred(j) == predictions(1).y_all(j) accuracy_totals(1).(acc_field) = accuracy_totals(1).(acc_field) + 1; end end end
关键说明
- 用
['pred_', num2str(i)]拼接出带循环变量的字段名字符串 - 通过
结构体.(字段名字符串)的语法,实现动态访问结构体字段 - 增加字段初始化判断,避免因字段未定义导致运行报错
内容的提问来源于stack exchange,提问作者Tony Sirico
相关产品推荐
相关产品推荐

