-2

再会,

我想在 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

有任何想法吗?

4

3 回答 3

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),例如

于 2013-05-31T20:27:39.557 回答
0

有一个类似的问题有一个成功的答案:foreach loop with strings in Matlab

可以使用带有 {} 的元胞数组语法:

for i = {var1,var2,var3}
a(j) = i + 10;
j = j + 1;
end
于 2013-05-31T19:29:45.173 回答
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
于 2013-05-31T21:01:36.847 回答