私は数千行のコードを含む大きな Matlab テストベンチに取り組んでおり、Matlab のプロファイラーで決定された、最も時間のかかるルーチンを最適化しようとしています。最も時間のかかる操作の 1 つが次の操作であることに気付きました。
list = list((list(:,1) >= condxMin) & (list(:,1) <= condxMax) & (list(:,2) >= condyMin) & (list(:,2) <= condyMax),:);
具体的には、座標の大きなリスト (少なくとも 50000 x 2) があり、このリストの値を制限して、これらの条件の両方を検証するポイントのみを保持したいと考えています: list(:,1) must be within [ condxMin, condxMax] と [condyMin condyMax] 内の list(:2)。
このコード行は既にベクトル化されていることを考えると、もっと効率的な方法はないかと考えていました。また、Matlab が短絡を行っているかどうかも疑問です。そうでない場合は、ベクトル化を中断せずに while ループを使用して実行する方法はないと思います。代わりに、次のように記述します。
j=1;
for i=1:size(list,1)
if(cond1 && cond2 && cond3 && cond4)
newlist(j,1:2) = list(i,1:2);
j=j+1;
end
end
あなたの答えを前もってありがとう:)