2011-08-22 6 views
10

Comment puis-je combiner 2 matrices A, B en une pour que la nouvelle matrice C = rangée 1 de A, suivie de la rangée 1 de B, puis rangée 2 de A, rangée 2 de B, rangée 3 de A, rangée 3 de B, etc? De préférence sans boucle for?matlab - comment fusionner/entrelacer 2 matrices?

ex: A = [1 2 3; 4 5 6], B = [5 5 5; 8 8 8].
AB = [1 2 3; 5 5 5; 4 5 6; 8 8 8].

Répondre

12

Tout ce dont vous avez besoin est un peu de caténation et de remodelage. D'abord, vous caténatez le long de la cote 2, puis vous transposez et linéarisez (AB(:)), de sorte que vous obtenez un vecteur dont les trois premiers éléments sont la première rangée de A, puis la première rangée de B, puis la deuxième rangée de A, etc. Tout ce qui reste à la fin appelle le remodelage pour remettre tout dans un tableau.

nColumns = size(A,2); 
AB = [A,B]'; 
AB = reshape(AB(:),nColumns,[])'; 

Vous pouvez également construire AB directement via l'indexation. Dans ce cas, A est autorisé à avoir une ligne de plus que B. Ceci est probablement plus rapide que ce qui précède.

[nRowsA,nCols] = size(A); 
nRowsB = size(B,1); 

AB = zeros(nRowsA+nRowsB,nCols); 
AB(1:2:end,:) = A; 
AB(2:2:end,:) = B; 
Questions connexes