ベクトルx
があり、要素 ( ) を追加する必要がありnewElem
ます。
違いはありますか -
x(end+1) = newElem;
と
x = [x newElem];
?
@ThijsWの答えに追加するだけで、連結方法よりも最初の方法の方が速度が大幅に向上します。
big = 1e5;
tic;
x = rand(big,1);
toc
x = zeros(big,1);
tic;
for ii = 1:big
x(ii) = rand;
end
toc
x = [];
tic;
for ii = 1:big
x(end+1) = rand;
end;
toc
x = [];
tic;
for ii = 1:big
x = [x rand];
end;
toc
Elapsed time is 0.004611 seconds.
Elapsed time is 0.016448 seconds.
Elapsed time is 0.034107 seconds.
Elapsed time is 12.341434 seconds.
これらの時間は2012bで実行されましたが、matlab 2010aで同じコンピューターで同じコードを実行すると、
Elapsed time is 0.003044 seconds.
Elapsed time is 0.009947 seconds.
Elapsed time is 12.013875 seconds.
Elapsed time is 12.165593 seconds.
したがって、速度の利点は、最新バージョンの Matlab にのみ適用されると思います
前述のように、 を使用するとx(end+1) = newElem
、ベクトルが転置されているかどうかに関係なく、ベクトルをスカラーと連結できるという利点があります。したがって、スカラーの追加に対してより堅牢です。
x = [x newElem]
ただし、一度に複数の要素を追加しようとしたときにも機能することを忘れてはなりません。さらに、これは行列を連結したい場合にもう少し自然に一般化されます。M = [M M1 M2 M3]
x
全体として、既存のベクトルをスカラーであるかどうかにかかわらず連結できるソリューションが必要なnewElem
場合は、これでうまくいくはずです。
x(end+(1:numel(newElem)))=newElem