2016-09-11 4 views
0

je une matrice 2D A comme:Matlab matrice de transformation 2D à la matrice 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;] 

Je veux transformer cette matrice 2D à une matrice 3D B avec la taille 2X3X4, comme:

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]; 

maintenant ce que je fais est d'abord transformer cette matrice 2D A au type de cellule C avec mat2cell et ensuite utiliser cat pour le transformer 3D Matrix B, mais c'est trop compliqué, puisque je fais pas besoin de cette cellule C du tout.

Est-ce que certains peuvent me donner des conseils pour transformer A en B directement et élégamment?

Merci!

+0

est 'A' toujours 4x6? –

+0

@RafaelMonteiro non, c'est juste un exmaple, seulement chaque page de B est de même taille. –

Répondre

2

Vous pourriez faire quelque chose comme ça -

[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

génial !!! Vous avez créé une matrice 4D et économisé beaucoup de temps. Mais il y a une petite erreur dans votre code. Je pense qu'il devrait être: –

+0

@ JayWang Il devrait être? – Divakar

+0

Désolé, ctrl + c a échoué. devrait être output = reshape (permute (reshape (A, nr, m/nr, nc, []), [1,3,2,4]), nr, nc, []) –