动态创建和命名数组

时间:2013-05-18 10:24:25

标签: arrays matlab loops

请考虑以下代码段

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 进行一些更改。请建议。

3 个答案:

答案 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。除非你真的需要它们,否则不要使用它们。