このバグは、Matlab が賢すぎてそれ自体が役に立たないことが原因です。
私は次のようなものを持っています
for k=1:N
stats = subfun(E,k,stats);
end
wherestats
は1xN
配列で、N=5000
たとえば、 からsubfun
計算stats(k)
しE
、それを統計に入力します
function stats = subfun(E,k,stats)
s = mean(E);
stats(k) = s;
end
もちろん、大きな配列を前後に渡すと、その要素の 1 つを埋めるためだけにオーバーヘッドが発生します。ただし、私の場合、オーバーヘッドはごくわずかであり、代わりにこのコードを好みます
for k=1:N
s = subfun(E,k);
stats(k) = s;
end
私の好みは、実際にはstats
. また、いくつかの割り当ては、実際にはかなり複雑です。
前述のとおり、オーバーヘッドは無視できます。しかし、私が些細なことをすると、この取るに足らないif文のように
for k=1:N
i = k;
if i>=1
stats = subfun(E,i,stats);
end
end
subfun 内で行われる割り当ては、突然「永久に」かかります (N で直線的に増加するよりもはるかに速く増加します)。そして、永遠にかかるのは計算ではなく、割り当てです。実際、それは次のナンセンスよりもさらに悪いですsubfun
function stats = subfun(E,k,stats)
s = calculation_on_E(E);
clear stats
stats(k) = s;
end
毎回統計を再割り当てする必要があります。
なぜこれが起こるのか、誰かが最もかすかな考えを持っていますか?