【问题标题】:Is there a non-iterative equivalent of this expression in MATLAB?在 MATLAB 中是否有此表达式的非迭代等效项?
【发布时间】:2011-03-06 21:09:03
【问题描述】:

表达式为:

for i=1:n
    X(:,i) = [P{i}(:)];
end

其中 X 是 DxN 矩阵,P 是元胞数组。

【问题讨论】:

  • 对不起,忘了提。 P{i} 是一个“[2x2 double]”,我认为它是一个矩阵。我使用 mat2cell 获得了它。据我了解, mat2cell 返回一个矩阵元胞数组。

标签: matlab matrix cell


【解决方案1】:
reshape(cat(3,P{:}),[numel(P{1}) n])

当然,上述解决方案只是为了好玩。我建议对这两种解决方案进行分析,并且仅在它具有显着的性能优势时才使用它。

可维护性和可读性也是编写代码时需要考虑的非常重要的因素。

【讨论】:

    【解决方案2】:

    如果您通过mat2cell 获得元胞数组,您可能希望将图像块排列到数组X 的列中。这可以使用命令IM2COL

    一步完成
    %# rearrange the large array so that each column of X
    %# corresponds to the 4 pixels of each 2-by-2 block
    X = im2col(largeArray,[2 2],'distinct');
    

    【讨论】:

    • 太棒了,这正是我想要的!确实,上述代码的上下文是 PCA 图像分析。
    【解决方案3】:

    你也许可以逃脱:

    P{1} = [ 1 2; 3 4];
    P{2} = [ 7 8; 9 10];
    P{3} = [ 11 12; 13 14];
    X = [P{:}]
    
    X =
    
         1     2     7     8    11    12
         3     4     9    10    13    14
    

    然后进行某种 reshape() 以到达您想要的位置。

    【讨论】:

      猜你喜欢
      • 2018-07-20
      • 2011-08-09
      • 2016-05-11
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-04
      • 2010-10-02
      相关资源
      最近更新 更多