Matlab 将2×4矩阵更改为2×2×4矩阵

Matlab 将2×4矩阵更改为2×2×4矩阵,matlab,matrix,Matlab,Matrix,假设我有矩阵 A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16]; 我将生成大小为[2,2,4]的矩阵B,以便 B(:,:,1) = [1 2; 5 6]; B(:,:,2) = [9 10; 13 14]; B(:,:,3) = [3 4; 7 8]; B(:,:,4) = [11 12; 15 16]; 如何生成此3D矩阵?使用mat2cell的一种解决方案: dim1 = [2,2]; %first dimen

假设我有矩阵

A = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
我将生成大小为[2,2,4]的矩阵
B
,以便

B(:,:,1) = [1 2; 5 6];
B(:,:,2) = [9 10; 13 14];
B(:,:,3) = [3 4; 7 8];
B(:,:,4) = [11 12; 15 16];

如何生成此3D矩阵?

使用
mat2cell
的一种解决方案:

dim1 = [2,2];                 %first dimension of the submatrix
dim2 = [2,2];                 %second dimension of the submatrix
C = mat2cell(A,dim1,dim2)     %for square submatrix C=mat2cell(A,dim1) work also
B = reshape([C{:}],[2,2,4]) 

这真的是最快的吗?它们的大小都是一样的,所以通过一个单元格听起来很慢(至少,根据我的经验,如果可能的话,呆在N-D矩阵中会更快)。你可能需要做花式的ND
permute()
restrape()
虽然我从来没有说过它是最快的!它只是简单易用。它基本上等于我所想的解决方案。然而,我很好奇是否有一种不使用mat2cell的方法,它可以在非常大的Matice情况下减慢处理速度。例如,你也可以使用
整形(permute(整形(a.),[4,2,2]),[2,1,3]),[2,2,4])
,但这有点难看。一旦你有了这些子阵列,你打算怎么处理它们?