これは実際にあなたがやろうとしていることによります。このコードから始めて、あなたがやっている行動やその行動を変えることができるかどうか考える必要があります。提示したコードスニペットには依存性がほとんどない(つまり、a、b、something、vectorはどのように関連しているのか)ので、あいまいな解決策しか提示できないと思います。
新しい結果を連結して配列を動かし続けるという効果を回避するために、コードを削除したいと思っています。
まずアプリケーションの最も遅い部分がこの原因であることを確認してください。 Matlabプロファイラを見てみましょう。あなたのコードのその部分が主要な時間ではない場合は、それを改善するために多くの時間を費やしてはいけません(そして、mlintにそのコード行を無視すると言うだけです)。
繰り返し回数が一定であることを確実にするためにコードを分析することができれば、変数を事前に割り当ててパフォーマンス上のペナルティを防ぐことができます(最悪の場合はforループを書くか、 。あるいは、いくつかの変数を取り除くことができれば、ループの外にある任意のループ不変条件を動かすのにも役立ちます。常に許容範囲のものがあります。その場合には、ダブルスの平等をチェックするには注意してください。あなたのコードの性質は、例えば、あなたがコンバージェンスを達成するために反復されている(これを許可しない場合
vector = zeros(1,100);
while a - b ~= 0
othervector = sum(something);
vector(iIteration) = sum(othervector);
iIteration = iIteration + 1;
end
:だから、このようになります。 )、パフォーマンスを向上させるために実行できるトリックがいくつかありますが、そのほとんどは大まかなルールであり、悪い状況を最大限に活用しようとしています。この最後のケースでは、メンテナンスコードを追加してパフォーマンスを少し向上させることができます(しかし、時間消費で得られるもの、メモリ使用量が減ります)。
あなたはコードは、ほとんどの時間の100回の* nの反復を実行することを期待し、あなたがこのような何かをしようとするかもしれない、のは、言ってみましょう:
iIteration = 0;
expectedIterations = 100;
vector = [];
while a - b ~= 0
if mod(iIteration,expectedIterations) == 0
vector = [vector zeros(1,expectedIterations)];
end
iIteration = iIteration + 1;
vector(iIteration) = sum(sum(something));
...
end
vector = vector(1:iIteration); % throw away uninitialized
vector = vector/100;
それはかなり見て、代わりの配列のサイズを変更しない場合があります各繰り返しでは、配列は100回目の繰り返しごとにサイズが変更されます。私はこのコードを実行していませんが、以前のプロジェクトでは非常に似たコードを使用しています。
'a'と' b'は何に依存していますか? 「何か」は何に依存しているのですか? 'a'と' b'で?それはいつも同じですか? – Darhuuk
実際に条件を入れるのではなく、私が知りたいことは 'vector = [vector、sum(othervector)];を実行する方法です。 '他の方法では、ループが100回続くと言うことができます – cMinor
密接に関連する/重複する可能性のある質問:[matlab - スピードのために事前割り当てを検討する](http://stackoverflow.com/questions/2151636/matlab-consider-preallocating-for-speed )、[MATLABの拡張可能なデータ構造](http://stackoverflow.com/questions/2625048/growable-data-structure-in-matlab)、[MATLABで長さが不明な行列?](http://stackoverflow.com/questions/1548116/matrix-of-unknown-length-in-matlab) – gnovice