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

问题描述

我编写了一个函数,用于根据图像的坐标和颜色(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. 我可以使用地图功能来浏览possibleMap,还是地图功能仅适用于一维循环?

  2. 因为我本身不需要错误映射,但只需要最少的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 else else语句交换它们时,速度快了将近2倍(:

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...