生成矩形块的索引

时间:2018-02-05 15:00:23

标签: python-3.x matrix generator

在处理以矩阵表示的图像时,我经常发现自己生成矩形补丁的索引,如:

si, sj = 0, 0  # upper-left corner
w, h = 2, 2  # patch width & height

indices = ((i, j) for i in range(si, si + h) for j in range(sj, sj + w))
print(list(indices))

# process corresponding pixels

请注意

  1. 生成器代码很长,很适合单行,我找不到一种优雅的方法将它组织成多行。
  2. 嵌套的for循环并不好,因为我需要一个iterable来提供给下一个处理步骤。
  3. 我觉得在Python中存在一种超级优雅的方式来做到这一点。在那儿?或者任何优雅的方式将生成器代码组织成多行而不使用行继续\

2 个答案:

答案 0 :(得分:2)

这听起来像是生成器函数的用例(请参阅此StackOverflow question以获得一个很好的解释。)。 您可以将其定义为:

def generator(si, sj, w, h): 
  for i in range(si, si + h):
    for j in range(sj, sj + w):
      yield (i, j)

然后,您可以将该函数传递给下一个处理步骤并迭代它。

答案 1 :(得分:2)

thread找到我想要的解决方案。

from itertools import product

si, sj = 0, 0  # upper-left corner
w, h = 2, 2  # patch width & height
indices = product(range(si, si + h), range(sj, sj + w))
print(list(indices))
相关问题