2

/edit :このトピックに関する興味深い議論については、こちらを参照してください。ありがとう@ダン


a(m,n) = 0のサイズによっては、を使用する方が を使用するaよりも高速に見えますa = zeros(m,n)。ループ前の事前割り当てに関しては、両方のバリアントは同じですか?

4

2 に答える 2

5

それらは間違いなく同じではありません。

のパフォーマンスを上回る方法はありますがa=zeros(m,n)、単純に実行a(m,n) = 0するのは安全な方法ではありません。のエントリがaすでに存在する場合、それらは存在し続けます。

いくつかの優れたオプションについては、これを参照してください。リスクを気にしない場合は、ループを逆方向に実行することも検討してください。

于 2013-08-13T09:54:22.577 に答える
1

あなたのmとn次第だと思います。時間を自分で確認できる

tic; b(2000,2000) = 0; toc;
Elapsed time is 0.004719 seconds.
tic; a = zeros(2000,2000); toc;
Elapsed time is 0.004399 seconds.

tic; a = zeros(2,2); toc;
Elapsed time is 0.000030 seconds.
tic; b(2,2) = 0; toc;
Elapsed time is 0.000023 seconds.
于 2013-08-13T09:47:20.203 に答える