matlab - 如何合并/交错2个矩阵?

时间:2011-08-22 01:04:45

标签: matlab matrix concatenation

如何将2个矩阵A,B组合成一个,使新矩阵C = A的第1行,然后是B的第1行,然后是A的第2行,B的第2行,第3行的第3行B等3?最好没有for循环?

例如: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]。

1 个答案:

答案 0 :(得分:12)

你需要的只是一些catenation和重塑。首先,沿着维度2进行连接,然后转置并线性化(AB(:)),这样就得到一个向量,其前三个元素是A的第一行,然后是第一行B,然后是第二行A等等所有剩下的就是调用reshape将所有内容重新放回到数组中。

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;