在 matlab 中重塑元胞数组 - k*MxN 到 M x k*N

Reshaping cell array in matlab - k*MxN to M x k*N

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

有没有没有循环的可能?

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

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

然而,使用更简单的循环性能可能会更好,尤其是对于较大的矩阵。

这可以通过 reshape and permute 的组合来完成。此方法适用于 数值数组 元胞数组 .

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