2015-07-12 43 views
0

的收集統計信息是否有快速的方法來做到這一點從一個大組文件

function [A,B]=powerplot(basepath,N) 
    A=zeros(N,1); 
    B=zeros(N,1); 
    for k=0:N-1 
     filename=sprintf('%s-%d.txt',basepath,k); 
     data=load(filename); 
     [a,b]=powerfit(data(:,1),data(:,2)); 
     A(k+1)=a; 
     B(k+1)=b; 
    end 
end 

其中

function [a,b]=powerfit(X,Y) 
    p=polyfit(log(X),log(Y),1); 
    a=exp(p(2)); 
    b=p(1); 
end 

該文件包含了一個集成的測量,在不同時間拍攝的每個文件,包含不同的行數。我能否以更好的方式組織我的數據?爲了加快速度,是否有必要使用像ROOT這樣的庫在本機代碼中進行分析?

+0

嘗試'profile'識別慢行,也許'load'是不是最佳的選擇,因爲它涉及到一些先進的代碼確定文件分隔符,數據類型等 – Daniel

+0

@Daniel這是負載是緩慢的。那麼如何加載數據呢? – user877329

+0

當每次迭代大於3秒時,您可以嘗試並行軟件包。此外,當你使用linux時,將所有文件複製到tmpfs(ram)。這將減少I/O延遲。 – Markus

回答

3

問題是load。通過用dlmread替換load,代碼變得更快。

function [A,B]=powerplot(basepath,N) 
    A=zeros(N,1); 
    B=zeros(N,1); 
    for k=0:N-1 
     filename=sprintf('%s-%d.txt',basepath,k); 
     data=dlmread(filename); 
     [a,b]=powerfit(data(:,1),data(:,2)); 
     A(k+1)=a; 
     B(k+1)=b; 
    end 
end