2010-06-24 83 views

回答

1

這與詢問相同:爲什麼要創建一個值爲0的變量?

通常你會這樣做,如果你打算一起累積一堆結果在一起。在這種情況下,你必須開始「某處」。

6

繼j_random_hacker的答案之後,在MATLAB中預分配數組而不是讓MATLAB擴展它更有效。 MATLAB可以擴展陣列,如果你只是將元素關閉陣列的當前「結束」,像這樣:

x = [] 
for ii=1:1e4 
    x(ii) = 1/ii; 
end 

這真的是低效的,因爲在迴路中的每一步,MATLAB將重新分配「X」是一個比以前更大的元素。以下是更快:

x = zeros(1, 1e4); 
for ii=1:1e4 
    x(ii) = 1/ii; 
end 

(可能是最快的還是在這種情況下:x = 1./(1:1e4);,但預分配路線是你需要什麼,當你解決不了的事情的向量化操作)

+3

應該注意的是,這種優化雖然總是有用,但在涉及大矩陣之前通常並不重要。製作一個小測試腳本以查看這種效果如何縮放。我個人並不擔心這個問題,直到大約200多個元素在一個不斷增長的載體中。 – MatlabDoug 2010-06-24 14:22:32

+0

是的,越來越小的數組是(相對)很好,這就是爲什麼我選擇1e4元素;) – Edric 2010-06-24 15:19:59

0

儘管可以從空矩陣開始並通過連接(添加)新元素來擴展它,但在MATLAB中向量擴展的效率非常低,因爲每次連接另一個元素時都需要新的內存。預分配預先建立了一個正確大小的矩陣,然後可以用正確的值替換每個零元素。這種方法效率更高,特別是在涉及循環的程序中。

-1

如果您要處理大型矩陣,這很有幫助。或者如果你打算使用稀疏矩陣。當您一次又一次使用相同的矢量或矩陣時,這也很有幫助。