3

コードのプロファイリングを行ったところ、この特定の関数に時間がかかりすぎていることがわかりました。このコードを改善する方法について何か提案はありますか?

function s = compute_distance_hist(h1,h2)
    s = sum(sum(sum(sqrt(h1).*sqrt(h2))));

この関数は、ヒストグラムの距離を計算します。

4

2 に答える 2

5

sqrt(h1.*h2)最も内側の括弧内で実行すると、1 つの平方根を節約できます 。

于 2013-02-28T13:30:24.610 に答える
2

もう少しエレガントな方法は

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
于 2013-02-28T14:09:22.720 に答える