2016-05-11 16 views

回答

2

有時候我填的是矩陣的倒退。這可以防止需要一個單獨的分配線,有時它會更簡單。 (例如,在結構數組與不確定的領域填充時)

,看起來像這樣:

for ix = numColumns:-1:1 
    results(:,ix) = <function generating results>; %No pre-allocation required 
end 

下面

對於一些比較奇怪的原因無關,但有趣的負面評論,我認爲這實際上比調用非常大的矩陣的zeros()要快。您可以通過比較以下看到:

tic; for ix=1:1000; x = zeros(1000); end; toc 
%1.18 second on my current computer 

tic; for ix=1:1000; clear('y'); y(1000,1000)=0; end; toc 
%0.032 seconds on my current computer 

我已經看到了這個地方#2事業的一個很好的說明,但現在不能找到它。

+0

沒有它沒有。預分配*總是*更快。 –

+1

向後迭代通過循環首次完成全部分配。這獲得了預先分配的所有優點。奇怪的加速是二階效應,這是因爲對於較大的n值,「x = zeros(n)」明顯慢於「x(n,n)= 0」。 – Pursuit

+0

humm它可能是。但是,這也是我的版本特定。 –