我有一个在多个工作站上运行的循环,每个循环处理5个不同的类,当获得结果时,它将使用它所使用的类的名称保存结果。
例如在我使用的工作站1上:
class1 = 1;
class2 = 10;
%code that will run on all images associated with classes 1:10
% final_result from all 10 classes is calculated here
我想立即保存,名称如下:
result_1_10 = final_result;
save result_1_10 result_1_10;
我可以手动执行此操作但在更改一个值后更改所有计算机上的值变得非常困难,我宁愿保存它们并从两个变量class1
和{{1 }}
以下是我的尝试:
class2
这会给我['result_' num2str(class1) '_' num2str(class2)];
。这是我想要的,但它是一个字符串,而不是一个变量,所以我不能将结果值赋给它
result_1_10
会出错:
错误:无法包含多个LHS分配的数组 LEX_TS_STRING。
我甚至试过['result_' num2str(class1) '_' num2str(class2)] = final_result;
,但这也会出错。
我该如何实际做到这一点?
谢谢
答案 0 :(得分:2)
虽然可以执行此操作,但它是very much discouraged by The Mathworks themselves。每当您尝试存储变量名称本身中变量包含的信息时,这就表明可能应该重新安排一些事情。也许考虑使用不同的数据结构。
例如,考虑使用struct
,其中classes
为字段,result
为字段。
S.class1 = 1;
S.class2 = 10;
S.result = final_result;
然后,您甚至可以创建一个包含数据的结构数组。
S = struct('class1', {1, 2, 1}, ...
'class2', {10, 11, 10}, ...
'result', {rand(10), rand(10), rand(10)});
然后,当class1
为1时,您可以获取所有结果:
S([S.class1 == 1]);
或class1
为1且class2
为10
S([S.class1 == 1] & [S.class2 == 10]);
如果您坚持按照自己的方式进行操作,则必须使用eval
或assignin
来执行此操作。此外,sprintf
通常比字符串连接更简洁。
variable = sprintf('result_%d_%d', class1, class2);
eval([variable, '= final_result;']);