2016-09-11 49 views
0

我有一个二维矩阵A这样的:Matlab的变换2D矩阵3D矩阵

A = [ 1 2 3 4 5 6; 
    7 8 9 10 11 12; 
    1 2 3 4 5 6; 
    7 8 9 10 11 12;] 

我想这个二维矩阵变换的3D矩阵B大小为2X3X4,如:

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

现在我所做的是首先将这个2D矩阵A转换为单元格类型Cmat2cell,然后使用cat将其转换为3D矩阵B,但它太复杂了,因为我做根本不需要这个单元格C

有些人可以给我任何建议,我怎么可以直接和优雅地将A转换为B

谢谢!

+0

是'A'总是4x6的? –

+0

@RafaelMonteiro不,它只是一个例子,只有B的每一页都是相同的大小。 –

回答

2

你可以做这样的事情 -

[m,n] = size(A); 
nr = 2; % Number of rows in o/p 
nc = 3; % Number of cols in o/p 
out = reshape(permute(reshape(A,nr,m/nr,nc,[]),[1,3,2,4]),nr,nc,[]); 
+0

太棒了!您已经创建了4D矩阵并节省了大量时间。但是你的代码有一个小错误。我认为应该是: –

+0

@JayWang应该是? – Divakar

+0

对不起,ctrl + c失败。应该是output = reshape(permute(重塑(A,nr,m/nr,nc,[]),[1,3,2,4]),nr,nc,[]) –