【问题标题】:Optimize a simple function(histogram distance) in Matlab在 Matlab 中优化一个简单的函数(直方图距离)
【发布时间】:2025-12-29 05:05:12
【问题描述】:

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

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

此函数计算直方图距离。

【问题讨论】:

  • 您是否经常调用此函数?或者您可以在调用它的循环之外预先计算出 sqrt 吗?

标签: image matlab optimization image-processing histogram


【解决方案1】:

更优雅一点的方式是

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

【讨论】:

  • 谈到速度时,匿名函数是一个糟糕的选择。在 [function call overhead in Matlab/C/Python] 上的基准模拟中,结果表明调用匿名函数比调用在单独或更好的同一 m 文件中定义的函数慢两倍。
【解决方案2】:

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

【讨论】: