这个错误是由于 Matlab 太聪明了。
我有类似的东西
for k=1:N
stats = subfun(E,k,stats);
end
哪里stats
是一个1xN
数组,N=5000
比如说,从subfun
计算,并将其填充到 statsstats(k)
E
function stats = subfun(E,k,stats)
s = mean(E);
stats(k) = s;
end
当然,来回传递一个大数组,只是为了填充其中一个元素,会有一些开销。然而,就我而言,开销可以忽略不计,我更喜欢这段代码而不是
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
这需要每次重新分配统计数据。
有没有人知道为什么会发生这种情况?