2015-07-12 3 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

Try 'profile' для выявления медленных линий, может быть,' load' не является оптимальным выбором, поскольку она включает в себя некоторые дополнительные код, определяющий разделители файлов, типы данных и т.д. – Daniel

+0

@Daniel Это нагрузка, которая идет медленно. Итак, как загружать данные? – user877329

+0

Когда каждая итерация занимает> 3 секунды, вы можете попробовать параллельный пакет. Кроме того, скопируйте все свои файлы в tmpfs (в ram), когда вы используете linux. Это уменьшит задержку ввода-вывода. – Markus

ответ

3

Проблема была load. Заменив load на dlmread, код стал намного быстрее.

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 
Смежные вопросы