web-dev-qa-db-ja.com

行列に行を追加する

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をマトリックスに追加するにはどうすればよいですか?

19
andandandand

Aones_row あなたがやる:

[ones_row; A]

これは次を返します。

1 1 1 1 1
1 2 3 4 5
6 7 8 9 0
39
David Alber

前の答え のようにそれをするでしょうが、場合によっては(マトリックスサイズが非常に大きくなる場合)、よりメモリに優しいソリューションは正しいサイズのマトリックスを事前に割り当てて使用することです既存の値を正しい場所に配置するためのインデックス付け:

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');
2
Dev-iL