2013-02-26 55 views
0

我是Matlab新手。 Mlint告訴我需要預分配陣列來提高performance.Can誰能告訴我我該如何預分配數組的大小在下面的代碼片段:在Matlab中預分配數組以提高性能

for jj= init_frame: nFrames 

    im1 = double(mov(jj).cdata); 
    color_hist_array(jj,:) = color_histogram(im1, bins); 
    [spatio_gram_array(jj,:),mu(jj,:,:),sigma(jj,:,:,:)] = spatiogram(im1, bins); 

預分配需要color_hist_array,spatio_gram_array,mu和sigma工作要做。

+0

@Parag非常感謝。 – MaxSteel 2013-02-26 16:45:13

回答

4

預分配實際上很容易在matlab中完成,只需更改一行代碼即可。

使用這個,你應該完成。

for jj= nFrames:-1:init_frame 

因爲你向後做循環,所有變量都以最大尺寸開始,空間一次分配。

+0

@Panther我不知道代碼片段應該做什麼,但我相當確信(如果它有效),這將解決警告。 – 2013-02-26 16:34:43

+0

是的。很好,謝謝。我一直在尋找你的代碼片段的解釋。 – MaxSteel 2013-02-26 16:35:33

+0

@Panther我的解決方案非常基礎。如果你想更好地理解它如何循環工作,我會建議你嘗試'幫助',否則谷歌預先分配。 – 2013-02-26 16:37:35

3

預分配意味着您首先創建一個您需要的大小的變量,然後填寫值。這比在循環的每次迭代中變量的大小要快得多,因爲增長需要分配新大小的新內存,然後將舊數據複製到新內存中。

下面是一個例子:

N = 10000; 
x = zeros(1,N); 
for i = 1:N 
    x(i) = someFunction(i); 
end 

Dennis's answer約落後循環是一個方便的伎倆沒有循環之前的代碼行額外預先分配。

+0

非常感謝您的解釋。 – MaxSteel 2013-02-26 16:39:08

1

閱讀thisthis鏈接。簡單地說,預分配就是告訴MATLAB,你的矩陣將會有多大(在你開始使用矩陣之前)。這樣MATLAB可以分配足夠的內存。但有更多的分析,你可以在上面的鏈接中找到。