<p>正如我在评论中所说的,你可以检查<code>cost</code>是否大于或等于<code>for px in xrange(3):</code>内的<code>bestcost</code>如果这样你就可以中断,这样可以节省很多不必要的迭代</p>
<p>示例(在较大的迭代中,灯光是否会改变以强调差异):</p>
<pre><code>import numpy as np
import time
## Generate some test data
CurPatch = np.random.randint(100, size=(3, 3))
Data = np.random.randint(100, size=(3000,3000))
# Current Location
x,y = 10, 10
# Initialise Best Match
bestcost = 999.0
bestx = 0;besty=0
t0 = time.time()
for Wy in xrange(-7,50):
for Wx in xrange(-7,50):
Ywj, Ywi = y+Wy, x+Wx
cost = 0.0
for py in xrange(3):
for px in xrange(3):
cost += abs(Data[Ywj+py-1,Ywi+px-1] - CurPatch[py,px])
if cost >= bestcost:
break
if cost < bestcost:
bestcost = cost
besty,bestx = Ywj,Ywi
print besty, bestx
print "time: {}".format(time.time() - t0)
</code></pre>
<p>时间是26毫秒</p>
<blockquote>
<p>time: 0.0269999504089 </p>
</blockquote>
<p>不带中断的代码将输出37毫秒:</p>
<blockquote>
<p>time: 0.0379998683929</p>
</blockquote>
<p>我还建议把这段代码转换成一个函数。在</p>