File Exchange サイト ( Interleave Vector or Matrices ) にある MATLAB 関数を作成しました。これはまさにあなたが望むこととそれ以上のことを行います。.m ファイルをダウンロードして他の .m ファイルと同じディレクトリに置くか、関数をコピーしてプログラムに貼り付けます。
この関数は、任意の数のベクトルまたは行列を行または列ごとにインターリーブします。入力が単なるベクトルの場合、向きを指定する必要はありません。追加の要素/行/列は、出力行列の末尾に追加されます。提供される他の回答は、同じ長さのベクトルに対して非常に具体的であるか、ベクトルの向きが正しいことを確認する必要があります。
関数の使用方法の例:
1) 行列の行のインターリーブ
A = [1 2; 3 4] B = [5 6;7 8]
C = interleave2(A, B, 'row')
C = [1 2
5 6
3 4
7 8]
2) 行列の列のインターリーブ
C = interleave2(A, B, 'col')
C = [1 5 2 6
3 7 4 8]
3) ベクトルのインターリーブ (注: 入力ベクトルは同じ向きである必要はありません)
A = [1 2 3 4] B = [5 6 7 8 9]'
C = interleave2(A, B)
C = [1 5 2 6 3 7 4 8 9]'
4) >2 行列のインターリーブ
A = [1 2;3 4] B = [5 6;7 8]
C = [9 10;11 12] D = [13 14;15 16]
E = interleave2(A, B, C, D, 'col')
E = [1 5 9 13 2 6 10 14
3 7 11 15 4 8 12 16]
5) 列が等しくない 2 つの行列の列をインターリーブする
A = [1 2;3 4]
B = [5 6 7 8;9 10 11 12]
C = interleave2(A, B, 'col')
C = [1 5 2 6 7 8
3 9 4 10 11 12]
6) 長さが等しくない 2 つ以上のベクトルのインターリーブ
A = [1 2 3 4] B = [5 6 7]
C = [8 9 10 11 12 13]
D = interleave2(A, B, C)
D = [1 5 8 2 6 9 3 7 10 4 11 12 13]