10
2つの行列A、Bを結合して、新しい行列C = Aの行1、Bの行1、Aの行2、Bの行2、Aの行3、行3 Bなどの?好ましくはforループなしで?matlab - 2つの行列をマージ/インターレースする方法は?
例: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]。
2つの行列A、Bを結合して、新しい行列C = Aの行1、Bの行1、Aの行2、Bの行2、Aの行3、行3 Bなどの?好ましくはforループなしで?matlab - 2つの行列をマージ/インターレースする方法は?
例: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]。
あなたが必要とするのは、少しのカテナネーションと再形成です。まず、次元2に沿って連結し、次に転置して線形化(AB(:)
)すると、最初の3つの要素がAの最初の行、次にBの最初の行、次にAの2番目の行などのベクトルが得られます。最後に残っているのは、すべてを再び配列に戻すために形を変えることです。
nColumns = size(A,2);
AB = [A,B]';
AB = reshape(AB(:),nColumns,[])';
また、インデックス作成によってABを直接作成することもできます。この場合、AはBよりも1つ多くの行を持つことができます。これはおそらく上記より速いでしょう。
[nRowsA,nCols] = size(A);
nRowsB = size(B,1);
AB = zeros(nRowsA+nRowsB,nCols);
AB(1:2:end,:) = A;
AB(2:2:end,:) = B;