【发布时间】:2014-08-08 20:36:44
【问题描述】:
我希望在以较大二维数组的位置 (x,y) 为中心的 WxW 窗口内找到最接近的匹配 NxN 块。下面的代码工作正常,但对我的需要来说非常慢,因为我需要多次运行此操作。有一个更好的方法吗?? 这里 N = 3, W = 15, x =15, y = 15 并且 (bestx,besty) 是最佳匹配块的中心
import numpy as np
## Generate some test data
CurPatch = np.random.randint(20, size=(3, 3))
Data = np.random.randint(20,size=(30,30))
# Current Location
x,y = 15,15
# Initialise Best Match
bestcost = 999.0
bestx = 0;besty=0
for Wy in xrange(-7,8):
for Wx in xrange(-7,8):
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:
bestcost = cost
besty,bestx = Ywj,Ywi
print besty,bestx
【问题讨论】:
-
你可以检查
cost是否大于或等于bestcost里面的for px in xrange(3):如果是的话你可以break,这样你可以节省很多不必要的迭代。 -
这个问题似乎是题外话,因为它是关于改进工作代码,这个问题可能更适合 codereview.stackexchange.com
标签: python arrays window patch matching