A
のような行列があります
1 2 3 4 5
6 7 8 9 0
そして、私は取得するために1行でそれを拡張したい
1 1 1 1 1
1 2 3 4 5
6 7 8 9 0
の行を作成します
col_size = size(A, 2);
ones_row = ones(1, col_size);
ones_row
をマトリックスに追加するにはどうすればよいですか?
A
とones_row
あなたがやる:
[ones_row; A]
これは次を返します。
1 1 1 1 1
1 2 3 4 5
6 7 8 9 0
前の答え のようにそれをするでしょうが、場合によっては(マトリックスサイズが非常に大きくなる場合)、よりメモリに優しいソリューションは正しいサイズのマトリックスを事前に割り当てて使用することです既存の値を正しい場所に配置するためのインデックス付け:
A = [ 1 2 3 4 5; 6 7 8 9 0 ];
B = ones(size(A) + [1,0]); % Create an array of ones that is one row longer
B(2:end,:) = A; % Replace the elements of B with elements from A
これがよりメモリフレンドリーであると言う理由は、1行を作成するとき、ベクトルにメモリを割り当てる必要があり、連結するときにメモリを割り当てる必要があるためですagain連結の結果。インデックスを使用する場合、中間ベクトルを割り当てる必要はありません。この例ではそれほど重要ではありませんが、数千回実行されるより大きな行列や演算には非常に重要です。
Image Processing Toolbox - padarray
にも便利な機能があります:
A = [ 1 2 3 4 5; 6 7 8 9 0 ];
B = padarray(A,[1 0],1,'pre');