3

我分析了我的代码,发现这个特定的功能花费了太多时间。关于如何改进此代码的任何建议?

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

此函数计算直方图距离。

4

2 回答 2

5

sqrt(h1.*h2)您可以通过在最内括号中执行来节省一个平方根 。

于 2013-02-28T13:30:24.610 回答
2

更优雅的方式是

sum( sqrt( h1(:).*h2(:) ) )

我不确定它是否更快......

还有一件事,如果问题的根源是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 回答