2014-07-17 39 views
0

該場景是我需要從幾個.mat文件加載數據,它是結構數組的形式,並將它們合併爲一個單一的數組以供後續處理。最初,我所做的就是這樣的:在MATLAB中,如果我需要更改每個循環的結構數組大小,如何提高效率?

raw_data = []; 
for i=1:length(file_name_list) 
    raw_data = [raw_data importdata(file_name_list(i))]; 
end 

然後MATLAB警告我說:

The variable 'raw_data' appears to change size on every loop iteration. Consider preallocating for speed. 

如果我理解正確的,附加到數組時,MATLAB將重新分配一些空間,所有的原始元素複製到新的地方,所以它可能需要很長的時間。但問題是,我不知道有多少結構將在文件中,我不知道每個結構的大小。有沒有辦法加快這個過程?它已經花費5秒鐘來完成總共600個結構的2個文件(這非常慢)。

謝謝你的幫助!

+0

您可能需要看看http://www.mathworks.com/help/matlab/matlab_prog/techniques-for-improving-performance.html – CroCo

回答

0

嘗試以下方法:

初始化raw_data爲等同大小的單元陣列到的.mat文件的數量。

raw_data=cell(length(file_name_list),1); 
for i=1:length(file_name_list) 
    raw_data{i} = importdata(file_name_list(i)); 
end 

這應該可以解決您的問題。

+1

只需稍加說明:最好[不要使用'我'作爲在Matlab中的變量名稱](http://stackoverflow.com/questions/14790740/using-i-and-j-as-variables-in-matlab)。 – Shai

+0

@ Shai謝謝。應該記下它。 – Naveen

+0

謝謝Naveen和Shai。如果我事先知道struct字段,那麼你認爲如果我在for循環之前將raw_data初始化爲大型結構數組將有幫助嗎?例如'raw_data = repmat(struct('field1',[],'field2',[]),1​​,1000000)'。其實我並不清楚MATLAB存儲結構,如果字段可以是任意大的數據類型,他們如何爲結構變量分配內存? – AppleJ