在matlab中重塑单元阵列 - k * MxN到M x k * N.

时间:2015-02-15 22:42:26

标签: matlab reshape cell-array

我有一个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

是否有可能没有任何循环?

2 个答案:

答案 0 :(得分:2)

这可以通过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

答案 1 :(得分:0)

如果矩阵很小,那么这应该可行,

cell2mat(arrayfun(@(i) A(2*i-1:2*i,:),1:3,'UniformOutput',0))
然而,对于更简单的循环,性能可能会更好,特别是对于更大的矩阵。