我在Python中有一个3D数组,我需要遍历数组中的所有立方体。也就是说,对于数组维度中的所有(x,y,z)
,我都需要访问多维数据集:
array[(x + 0, y + 0, z + 0)]
array[(x + 1, y + 0, z + 0)]
array[(x + 0, y + 1, z + 0)]
array[(x + 1, y + 1, z + 0)]
array[(x + 0, y + 0, z + 1)]
array[(x + 1, y + 0, z + 1)]
array[(x + 0, y + 1, z + 1)]
array[(x + 1, y + 1, z + 1)]
这个数组是一个Numpy数组,尽管这不是必需的。我发现使用numpy.fromfile()
一行程序读取数据非常容易。
有没有比下面更像Python的方法来迭代这些?这看起来很像使用Python语法的C。
for x in range(x_dimension):
for y in range(y_dimension):
for z in range(z_dimension):
work_with_cube(array[(x + 0, y + 0, z + 0)],
array[(x + 1, y + 0, z + 0)],
array[(x + 0, y + 1, z + 0)],
array[(x + 1, y + 1, z + 0)],
array[(x + 0, y + 0, z + 1)],
array[(x + 1, y + 0, z + 1)],
array[(x + 0, y + 1, z + 1)],
array[(x + 1, y + 1, z + 1)])
看看itertools,尤其是itertools.product。你可以用
也可以通过以下方式创建多维数据集:
并通过简单的加法来添加偏移量
在您的情况下,它将转换为
cube + (x,y,z)
。你的代码非常紧凑的版本是编辑:
itertools.product
使产品覆盖不同的参数,即itertools.product(a,b,c)
,因此我必须用as*map(...)
传递map(xrange, ...)
相关问题 更多 >
编程相关推荐