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