【问题标题】:Saving different sized vectors from a nested for loop in MATLAB从 MATLAB 中的嵌套 for 循环中保存不同大小的向量
【发布时间】:2013-07-25 21:08:29
【问题描述】:

我有一个 3 嵌套的 for 循环,它产生一个向量,但每次它通过循环运行时,产生的向量都会改变大小。我需要在 for 循环的末尾保存这些向量中的每一个,所以我正在考虑使用 mat2cell 并将它们存储在一个单元格中。但我不知道代码会得到一个单元向量,该向量将包含这些不同大小的向量中的每一个。

我会给出一个示例代码

for ip = n_low:n_up
    for jx = x_low:x_up
        for jphi = phi_lowx:phi_upx
            lx = find_path(ip,jx,jphi,0,1);
           .
           .
           .
           A_r = volumeintegrate(integr_final_r , r , z , phi);
       end
   end
end

显然,您不知道这些变量是什么或数字,但我认为它不需要解决问题。无论如何,A_r 是在循环结束时吐出的内容,但 A_r 的大小会随着循环自身的重复而变化。我需要保存每个 A_r 向量。

【问题讨论】:

    标签: matlab for-loop vector


    【解决方案1】:

    添加一个计数器并保存到一个单元格元素中:例如:

    counter=0
    for ...
       for ...
          for ...
              counter=counter+1;
              A_r{counter} = volumeintegrate(integr_final_r , r , z , phi);
    

    然后提取第n个向量只需写A_r{n}

    【讨论】:

    • 别忘了先将A_r初始化为正确尺寸的元胞数组。
    【解决方案2】:

    只需创建一个元胞数组:

    A_r = cell(Ni, Nj, Nk)
    

    然后创建循环 - 请注意,我正在对表现良好的整数进行索引,我将其用作单元格数组的索引,然后通过查看数组 iVec 等来计算所需变量的实际值:

    iVec = n_low:n_up;
    Ni = numel(iVec);
    jVec = x_low:x_up;
    Nj = numel(jVec);
    kVec = phi_lowx:phi_upx;
    Nk = numel(kVec);
    
    A_r = cell(Ni, Nj, Nk);
    
    for ii = 1:Ni
      ip = iVec(ii);
      for jj = 1:Nj
        jx = jVec(jj);
        for kk = 1:Nk
          jphi = kVec(kk);
          lx = find_path(ip,jx,jphi,0,1);
          ....
          A_r{ii,jj,kk} = volumeintegrate(integr_final_r , r , z , phi);;
        end
      end
    end
    

    您现在可以按照分配的方式访问每个数组:

    A_r{ii,jj,kk}
    

    【讨论】:

    • 弗洛里斯,感谢您的帮助,我实际上已经有了这个,我宁愿在单元向量中工作,而不是在单元阵列中工作。应该有助于我以后需要做的计算。
    • 如果你想要一个“细胞向量”,那么我猜 Natan 的回答正是你所要求的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-03
    相关资源
    最近更新 更多