【问题标题】:Reshaping cell array in matlab - k*MxN to M x k*N在matlab中重塑单元阵列 - k*MxN 到 M x k*N
【发布时间】:2015-02-15 22:42:25
【问题描述】:

我有一个 k * MxN 单元格数组,我想将其重塑为 M x k * N 数组。但我想按块执行此操作,以便保留行结构。

A B C         -->        A B C G H I M N O
D E F                    D E F J K L P Q R
G H I   
J K L
M N O
P Q R

有没有没有循环的可能性?

【问题讨论】:

    标签: matlab reshape cell-array


    【解决方案1】:

    这可以通过reshapepermute 的组合来完成。此方法适用于数字数组元胞数组

    A 表示您的数组。那么,想要的结果是

    B = reshape(permute(reshape(A.',N,M,[]),[2 1 3]),M,[]);
    

    或者,正如 Divakar 所说,您可以保存转置,这将减少运行时间:

    B = reshape(permute(reshape(A,M,k,[]),[1 3 2]),M,[]);
    

    例如,

    A = [ 5     9     2
          5     8     4
          5     0     4
          5     5     7
          7     6     3
          8     5     0
          8     7     5
          3     0     5 ];
    M = 2;
    N = size(A,2);
    k = size(A,1)/M;
    

    给予

    B =
         5     9     2     5     0     4     7     6     3     8     7     5
         5     8     4     5     5     7     8     5     0     3     0     5
    

    【讨论】:

    • 保存一个转置 - reshape(permute(reshape(A,k,size(A,1)/k,[]),[1 3 2]),k,[])
    【解决方案2】:

    如果你的矩阵很小,那么这应该可以工作,

    cell2mat(arrayfun(@(i) A(2*i-1:2*i,:),1:3,'UniformOutput',0))
    

    但是,如果使用更简单的循环,性能可能会更好,尤其是对于更大的矩阵。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-21
      • 1970-01-01
      • 2015-09-21
      • 1970-01-01
      • 2014-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多