2011-08-22 941 views
10

如何將2個矩陣A,B合併爲一個,以便新矩陣C = A的第1行,然後是B的第1行,然後是A的第2行,B的第2行,A的第3行第3行B等?最好沒有for循環?matlab - 如何合併/交錯2矩陣?

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

回答

12

所有你需要的是一些連鎖和重塑。首先,沿着維2鏈接,然後轉置併線性化(AB(:)),這樣就可以得到一個向量,其前三個元素是A的第一行,然後是B的第一行,然後是A的第二行等最後剩下的就是調用重塑將所有東西都放回到數組中。

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

或者,您可以通過索引直接構建AB。在這種情況下,允許A比B多一行。這可能比上述更快。

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

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