2011-08-22 19 views
10

¿Cómo puedo combinar 2 matrices A, B en una para que la nueva matriz C = fila 1 de A, seguido de la fila 1 de B, luego fila 2 de A, fila 2 de B, fila 3 de A, fila 3 de B, etc.? Preferiblemente sin un bucle for?matlab - cómo combinar/entrelazar 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].

Respuesta

12

Todo lo que necesita es un poco de catenation y remodelación. Primero, catene a lo largo de la dimensión 2, luego transpone y linealiza (AB(:)), de modo que obtiene un vector cuyos primeros tres elementos son la primera fila de A, luego la primera fila de B, luego la segunda fila de A, etc. Todo lo que queda al final es llamar a remodelar para volver a poner todo en una matriz.

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

Alternativamente, puede construir AB directamente a través de la indexación. En este caso, A tiene permitido tener una fila más que B. Esto es probablemente más rápido que el anterior.

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

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