美好的一天,
我想在Matlab中执行以下操作:
var1 = 10;
var2 = 15;
var3 = 20;
j = 1;
for i = [var1,var2,var3]
a(j) = i + 10;
j = j + 1;
end
clear j;
结果:
a(1) = var1 + 10 = 20
a(2) = var1 + 10 = 25
a(3) = var1 + 10 = 30
有什么想法吗?
答案 0 :(得分:2)
大量使用水晶球。您似乎想要动态生成名称var1,var2等。不要。以这种方式命名变量几乎没有优势。改为使用单元格数组:
var{1} = 10;
var{2} = 15;
var{3} = 20;
这样你就可以使用:
for i = 1:length(var)
a(j) = var{i} + 10;
...
注意大括号。
如果您的变量大小相同,那么使用数组切片会更好。 var(:, i)
或var(:,:,:,i)
,例如
答案 1 :(得分:0)
@FloHin和@Peter都提到了使用单元格,这是一个很好的方法,可以帮助你获得有限数量的非标量变量。如果您处理的是包含特定格式的未知数量的此类变量,您可以使用eval
函数按需获取当前变量的值:
var1 = 10;
var2 = 15;
var3 = 20;
var4 = 30;
# ...
# more variables following the varN = x pattern
all_variables = who('var*');
num = numel(all_variables);
a = zeros(num, 1);
for i = 1:num
a(i) = eval(all_variables{i}) + 10;
end
答案 2 :(得分:-1)
有一个类似的问题,答案是成功的:foreach loop with strings in Matlab
可能使用{}:
的单元格数组语法for i = {var1,var2,var3}
a(j) = i + 10;
j = j + 1;
end