2016-05-30 102 views
0

我有下面的代碼被執行數千次。通過使用Profiler,我將第二行(new_inds=...)標識爲整個代碼中最耗時的行。有沒有更好/更快的方法來做這個操作?在Matlab中加快索引查找的好做法是什麼?

for j=1:length(cls) 
    new_inds=[sti(:).time]==i & [sti(:).cluster]==cls(j); 
    % more code here 
    % 
    % 
    prob(j)=... 
end 
pr=prod(prob); 

回答

2

沒有看到更多的代碼,其難度肯定的告訴,但我希望它可以加速這一過程:

indexArg2 = [sti(:).cluster]; 
index1 = [sti(:).time]==i 

for j=1:length(cls) 
    new_inds=index1 & indexArg2==cls(j); 
    % more code here 
    % 
    % 
    prob(j)=... 
end 
pr=prod(prob); 

我的建議在這裏是走索引不屬於零部件與j環外的j相關。

P.S.有一種說法,你應該使用iijj作爲計數器而不是ij(因爲它們表示複數)。我已閱讀(但從未見過證明)使用iijj快於ij ...

相關問題