2014-12-21 61 views
0

我需要讀取大約4000個數據文件,每個大約400 kB。數據將在稍後分析,因此我將這些文件寫入數據結構。進口操作大約需要4分鐘,我也試過importdatadlmread,但沒有太大的區別。在matlab中導入多個大文件的快速方法

請讓我知道,如果是循環,輸入函數或Matlab只是慢導入多個大文件。使用catch/try是因爲這些文件中的某些文件無法正常讀取,但似乎不會減慢腳本的速度。

這裏的腳本:

for k=40020:10:75000 
try 
    name=['tmp' sprintf('%d',k)]; 
    c=c+1; 
    m(k).count=k; 
    m(k).col=load(name); 
    [val in]=find(m(k).col(:,5)~=1); 
    m(k).id=m(k).col(val,1); 
    m(k).posx=m(k).col(val,2); 
    m(k).posy=m(k).col(val,3); 
    m(k).posz=m(k).col(val,4); 
catch 
    disp(['Error']) 
end 
end 
+0

什麼樣的文件?包含數字的文本文件?你預先分配'm'? – Daniel

+1

要找出哪條線放慢了執行速度,您應該使用MATLAB Profiler運行該命令。如果確實是讀取文件的速度減慢(我懷疑它是這樣),那麼帶有'load'命令的行應該顯示爲瓶頸。 – MrAzzaman

+1

你的循環變量'k'不是順序的(它有10個跳轉),所以你的'm'數組實際上非常稀疏。 – Shai

回答

1

有幾件事情需要注意:

400 KB是不是一個大文件。

4分鐘內的4000個文件每個爲0.06秒。

你不會使用變量c。

您的矩陣索引從40020開始,每個循環包含數據的下一個結構索引是+10等....這非常稀疏,這是浪費內存和少量時間。

你說你使用dlmread並導入數據 - >然後在你正在使用的代碼中加載。文件是ASCII嗎?

找出時間的最佳方法是使用分析器。

profile on 
    % run your code 
    profile viewer 

文件是本地文件還是網絡文件?從網絡性能中讀取文件可能會慢很多。

+0

我做過配置文件,是負載正在放慢速度,負載,importdata和dlmread之間的速度沒有太大的區別。我將預先分配並查看是否有幫助,謝謝。 – Sherbika

+0

嘗試預分配使用:m = struct('count',[],'col',[],'id',[],'posx',[],'posy',[],'posz',[] )沒有幫助! .50s – Sherbika

+0

加載單個文件需要多長時間?與0.06秒可比?你的文件是什麼格式? – matlabgui

相關問題