在MATLAB中恢复矢量循环

时间:2012-09-20 04:43:40

标签: matlab loops vector for-loop

我在MATLAB中运行for循环。每次迭代都会生成一个长度不同于前一次迭代中创建的向量的向量。有没有什么可以恢复每个单独的向量?最后,我想连接这些向量中的每一个。我的代码就像

for i=1:n 
    v = zeros(1,i)
end

所以在i=n之后,v将是一个n矢量,但我也想恢复任何i的向量。在我的代码中,每个向量v不是零行向量,而是不同大小的向量。感谢。

2 个答案:

答案 0 :(得分:6)

当Rody的帖子(+1)出现时我已经输入了这个,所以我也可以发布它。一个替代解决方案效率非常低(我做了一些定时运行,差异是边际的)比Rody的,但避免复杂的索引是:

A = cell(1, n);
for i = 1:n
    A{1, i} = zeros(1, i);
end
Soln = cat(2, A{:});

我通过循环将不同长度的行向量存储在单元格数组中,然后在最后一步中将它们连接起来。

答案 1 :(得分:3)

最简单的方法就是这样:

w = [];
for i=1:n 
    v = zeros(1,i);

    %# your stuff here      

    w = [w v];
end

生成向量w,它是所有生成的向量v的串联。

但请注意,这很慢,因为w每次迭代都会增长。一个稍微复杂但更有效的解决方案是:

w = zeros(1, sum(1:n) );
j = 1;
for i=1:n 
    v = zeros(1,i);  

    %# your stuff here      

    w(1, j:j+i-1) = v;
    j = j+i;
end