听写理解有什么办法吗?

2024-10-06 11:18:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一段代码:

position = {}
for x in range(imdim[0]-shapesize+1):
  for y in range(imdim[1]-shapesize+1):
    curim = im[x:x+shapesize,y:y+shapesize]
    shapedict = {}
    for shapeid,(shape,contour) in enumerate(zip(shapes,contours)):
      values = {}
      curshape = curim[shape]
      curcontour = curim[contour]
      values['meandiff'] = curshape.mean()-curcontour.mean()
      values['maxmin'] = int(curshape.min())-int(curcontour.max())
      shapedict[shapeid] = values
    position[(x,y)] = shapedict
return position

…其中im是一个图像(numpy数组),imdim它的形状、形状和轮廓是比im更小尺寸(shapesize*shapesize)的二进制数组列表。你知道吗

它实际上是有效的,但我想知道是否有一种方法可以把所有这些都写在一个听写理解,盗梦空间的风格。如果是,它会跑得更快吗?你知道吗

此外,欢迎对样式或优化发表任何评论!你知道吗


Tags: inforpositionrangecontourvaluesshapeim
1条回答
网友
1楼 · 发布于 2024-10-06 11:18:17

我认为应该这样做,但我没有真正测试它:

position = {
    (x, y): {
        shapeid: {'meandiff': curim[shape].mean() - curim[contour].mean(),
                  'maxmin': int(curim[shape].min()) - int(curim[contour].max())}
        for shapeid,(shape,contour) in enumerate(zip(shapes,contours))
    }
    for (x,y,curim) in ((x, y, im[x:x+shapesize, y:y+shapesize])
            for x in range(imdim[0]-shapesize+1) 
            for y in range(imdim[1]-shapesize+1)
    )
}

棘手的部分是您定义的临时变量。对于curim,我创建了一个内部生成器表达式,否则您必须编写该表达式四次。您可以对curshapecurcontour执行相同的操作,但我认为这不值得额外的嵌套级别。你知道吗

是否更快:可能不会,当然不会明显。更重要的是,IMHO,代码的可读性。这当然是意见的问题。就我个人而言,我认为它比你原来的代码可读性更好。你知道吗

相关问题 更多 >