【问题标题】:Recovering vector in MATLAB for loop在 MATLAB for 循环中恢复向量
【发布时间】:2012-09-12 10:30:19
【问题描述】:

我在 MATLAB 中运行一个 for 循环。每次迭代都会产生一个长度与前一次迭代中创建的向量不同的向量。为什么要恢复每个单独的向量?最后,我想连接这些向量中的每一个。我的代码类似于

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

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

【问题讨论】:

    标签: matlab loops vector for-loop


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      最简单的方法是这样的:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-12-22
        • 2016-08-16
        • 2014-05-16
        • 1970-01-01
        • 1970-01-01
        • 2023-03-25
        相关资源
        最近更新 更多