请考虑以下代码段
for i = 1:100
Yi= x(i:i + 3); % i in Yi is not an index but subscript,
% x is some array having sufficient values
i = i + 3
end
基本上我希望每次for
循环运行时,下标从1变为2,3,...,100。在100次迭代后生效,我将有100个数组,从{{开始1}}到Y1
。
在MATLAB中实现这个的最简单方法是什么?
更新
这将运行15次
Y100
为简单起见,我采取了不断的投入。
现在我正在尝试使用基于Marc答案的单元格:
Y1 = 64;
fft_x = 2 * abs(Y1(5));
我想我需要在Y1 = cell(15,1);
fft_x = cell(15,1);
for i = 1:15
Y1{i,1} = 64;
fft_x{i,1} = 2 * abs(Y1(5));
end
进行一些更改。请建议。
答案 0 :(得分:1)
在matlab中创建可变命名的变量是不可能的。常见的解决方案是将单元格数组用于Y:
Y=cell(100,1);
for i =1:100
Y{i,1}= x(i:i+3);
i=i+3;
end
请注意,i=i+3
- 循环内的行for
无效。你可以删除它。
Y=cell(100,1);
for i =1:100
Y{i,1}= x(i:i+3);
end
答案 1 :(得分:0)
可以在matlab中创建可变命名的变量。如果你真的想要这样做:
for i = 1:4:100
eval(['Y', num2str((i+3)/4), '=x(i:i+3);']);
end
如何整理索引取决于您计划对x
做什么...当然......
答案 2 :(得分:0)
是的,您可以动态命名变量。然而,它几乎从来都不是一个好主意,并且有更好/更安全/更快的替代品,例如@Marc Claesen证明了细胞阵列。
查看assignin
函数(以及相关的eval
)。你可以做的事情是:
for i = 1:100
assignin('caller',['Y' int2str(i)],rand(1,i))
end
另一个相关功能是genvarname
。除非你真的需要它们,否则不要使用它们。