def xyzrange(start_vec, end_vec=None, stride_vec=(1,1,1)):
if end_vec is None:
end_vec = start_vec
start_vec = (0,0,0)
start_vec = np.array(start_vec, dtype=int)
end_vec = np.array(end_vec, dtype=int)
rangeargs = ( (start, end, stride) for start, end, stride in zip(start_vec, end_vec, stride_vec) )
xyzranges = [ range(*arg) for arg in rangeargs ]
# iterate then x first, then y, then z
# this way you process in the xy plane slice by slice
# but you don't create process lots of prefix-adjacent keys
# since all the keys start with X
zyxranges = xyzranges[::-1]
def vectorize():
pt = Vec(0,0,0)
for z,y,x in product(*zyxranges):
pt.x, pt.y, pt.z = x, y, z
yield pt
return vectorize()
评论列表
文章目录