问题描述
我编写了一个函数,用于根据图像的坐标和颜色(np数组)计算每个像素的误差。
基本上看起来像这样:
def checkPoints(i,j,x_left,y_top):
errormap = {}
for row in possibleMap[i][j]:
for target in row:
x,y = target
dE = np.sqrt((x-i)**2 + (y-j)**2)*dE_fac #distance
sE = ((skalarError((i>0)*(x - x_mapping_left)) + skalarError((j>0)*(y - y_mapping_top)))*sE_fac)**sE_exp #direction with respect to neighbouring pixels
cE = abs(color - pic_tomap[x,y])*cE_fac # color difference
errormap[dE + sE + cE + mE] = [x,y] # a dictionary... keys: ErrorValue,values: coordinates
return errormap
possibleMap是一个npArray,其中包含坐标元组
* _fac,* _ exp只是常量
x_mapping_left为i-1,但当i = 0时为0(y_mapping_left与j对应)
现在,我想知道几件事,因为我想获得最大的效率。
-
我可以使用地图功能来浏览possibleMap,还是地图功能仅适用于一维循环?
-
因为我本身不需要错误映射,但只需要最少的ErrorValue及其关联的坐标,是否有比上面的代码和以下代码更好的执行方式?
errormap[min(errormap.keys())]
- 我很乐意要求任何想法来获得更好的表现
解决方法
我最近发现这一点:
sE = ((skalarError((i>0)*(x - x_mapping_left)) + skalarError((j>0)*(y - y_mapping_top)))*sE_fac)**sE_exp
在性能方面是毁灭性的,因为这些原因:
(i>0)
(j>0)
正在消耗大量时间。 我不知道为什么,但是当我用if else else语句交换它们时,速度快了将近2倍(: