コードのプロファイリングを行ったところ、この特定の関数に時間がかかりすぎていることがわかりました。このコードを改善する方法について何か提案はありますか?
function s = compute_distance_hist(h1,h2)
s = sum(sum(sum(sqrt(h1).*sqrt(h2))));
この関数は、ヒストグラムの距離を計算します。
コードのプロファイリングを行ったところ、この特定の関数に時間がかかりすぎていることがわかりました。このコードを改善する方法について何か提案はありますか?
function s = compute_distance_hist(h1,h2)
s = sum(sum(sum(sqrt(h1).*sqrt(h2))));
この関数は、ヒストグラムの距離を計算します。
sqrt(h1.*h2)
最も内側の括弧内で実行すると、1 つの平方根を節約できます 。
もう少しエレガントな方法は
sum( sqrt( h1(:).*h2(:) ) )
速いかどうかはわかりませんが…
もう 1 つ、問題の原因が が何度も呼び出されるという事実である場合は、compute_distance_hist
明示的に呼び出すのではなく、関数ハンドルに変換して使用することをお勧めします。
たとえば、代わりに
while someCondition
% computations...
s = compute_distance_hist( a, b );
% more computations
end
どうですか
compute_distance_hist = @( h1, h2 ) sum( sqrt( h1(:).*h2(:) ) );
while someCondition
% computation
s = compute_distance_hist( a, b );
% more computations
end