2011-08-22 14 views
10

Come posso combinare 2 matrici A, B in una in modo che la nuova matrice C = riga 1 di A, seguita dalla riga 1 di B, quindi riga 2 di A, riga 2 di B, riga 3 di A, riga 3 di B, ecc.? Preferibilmente senza un ciclo for?matlab - come unire/interlacciare 2 matrici?

es: 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].

risposta

12

Tutto ciò che serve è un po 'di catenazione e rimodellamento. In primo luogo, si catenaria lungo la dimensione 2, quindi si traspone e si linearizza (AB(:)), in modo da ottenere un vettore i cui primi tre elementi sono la prima riga di A, quindi la prima riga di B, quindi la seconda riga di A, ecc. Tutto ciò che rimane alla fine è chiamare rimodella per rimettere tutto in un array.

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

In alternativa, è possibile costruire AB direttamente tramite indicizzazione. In questo caso, A può avere una riga in più rispetto a B. Questo è probabilmente più veloce di quanto sopra.

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

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