我有一个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
是否有可能没有任何循环?
答案 0 :(得分:2)
这可以通过reshape
和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
答案 1 :(得分:0)
如果矩阵很小,那么这应该可行,
cell2mat(arrayfun(@(i) A(2*i-1:2*i,:),1:3,'UniformOutput',0))
然而,对于更简单的循环,性能可能会更好,特别是对于更大的矩阵。