误差函数的效率 - 最小化问题

efficiency of error function - minimization problem

我写了一个函数来计算每个像素的误差,基于图像的坐标和颜色(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 相应)

现在我想知道一些事情,因为我想要我能得到的最大效率。

  1. 我可以使用 map-function 遍历 possibleMap,还是 map-function 仅适用于一维循环?

  2. 因为我不需要 errormap 本身,而只需要最少的 ErrorValue 和相关的坐标,有没有比上面的代码更有效的方法:

errormap[min(errormap.keys())]
  1. 我恳请任何想法以获得更好的性能

我最近发现,这一点:

sE = ((skalarError((i>0)*(x - x_mapping_left)) + skalarError((j>0)*(y - y_mapping_top)))*sE_fac)**sE_exp

在性能方面是毁灭性的,因为这些:

(i>0)
(j>0)

正在消耗大量时间.. 我不知道为什么,但是当我用 if then else 语句交换它们时,它快了将近 2 倍 (: