擅长:python、mysql、java
<p>一个简单的优化是放弃<code>sqrt</code>调用。x与sqrt(x)是单调的,由于不需要实际距离,只需要最小距离,所以使用x^2代替。应该有点帮助,因为sqrt很贵。在</p>
<p>这个技巧在处理距离时经常使用。例如,如果您有一个距离阈值,您可以使用阈值^2并在距离计算中删除sqrt。实际上,只有在需要绝对距离时才需要sqrt。对于相对距离,请删除sqrt。在</p>
<p>更新:可能需要对算法进行修改。现在你正在比较每个码本向量和每个像素。它可以加快速度以减少距离计算的次数。在</p>
<p>为此,使用<a href="http://en.wikipedia.org/wiki/Kd-tree" rel="nofollow noreferrer">kd-tree</a>可能会更好,这会将对每个像素的搜索从O(codebook)减少到O(log(codebook))。我从来没有在python中这样做过,但是一些google给出了一个可能会工作<a href="http://sites.google.com/site/mikescoderama/Home/kd-tree-knn" rel="nofollow noreferrer">here</a>的实现。在</p>