在处理以矩阵表示的图像时,我经常发现自己生成矩形补丁的索引,如:
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
请注意
我觉得在Python中存在一种超级优雅的方式来做到这一点。在那儿?或者任何优雅的方式将生成器代码组织成多行而不使用行继续\
?
答案 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))