最快的方法来挑选数据

时间:2016-04-12 13:51:29

标签: performance matlab indexing

我正在编写一个能够在a和b之间集成一个函数的函数。问题是该功能仅由具有相应时间点的数据阵列提供。

问题在于,当我必须切断下限和上限时,我必须切掉这段时间内的数据向量部分 - 而我的问题是,如何最有效地完成这项工作?

我现在正在做的事情如下:

llim = find(time==lima); 
ulim = find(time==limb);

data = data(llim:ulim); 
int1 = h/2*(data(1) + data(end) + 2*sum(data(2:end))); 

但根据分析器50-something%在前3行使用,所以如果可以减少它就会很棒。

我也尝试过使用

data = data(time>=lima & time<=limb);

但这并不快。有什么建议吗?

1 个答案:

答案 0 :(得分:2)

底线,逻辑条件线获胜。这是对具有随机时间差的1e3长度向量的分析:

N=1e3;
data=rand(1,N);

time=1:N;
for n=1:100

    li=sort(randi(N,2,1)) ;

    llim = find(time==li(1));
    ulim = find(time==li(2));

    f1 = @() data( find(time==li(1)): find(time==li(2)));
    f2 = @() data(time>=li(1) & time<=li(2));
    d(n)=diff(li);
    t1(n)=timeit(f1);
    t2(n)=timeit(f2);
end

%%
plot(d,t1,'s',d,t2,'o');
xlabel('llim-ulim');
ylabel('time (sec)');
legend('find method','logical cond method');

enter image description here

相关问题