<p>看看<a href="http://docs.python.org/library/itertools.html" rel="noreferrer">itertools</a>,尤其是<a href="http://docs.python.org/library/itertools.html#itertools.product" rel="noreferrer">itertools.product</a>。你可以用</p>
<pre><code>import itertools
for x, y, z in itertools.product(*map(xrange, (x_dim, y_dim, z_dim)):
...
</code></pre>
<p>也可以通过以下方式创建多维数据集:</p>
<pre><code>cube = numpy.array(list(itertools.product((0,1), (0,1), (0,1))))
print cube
array([[0, 0, 0],
[0, 0, 1],
[0, 1, 0],
[0, 1, 1],
[1, 0, 0],
[1, 0, 1],
[1, 1, 0],
[1, 1, 1]])
</code></pre>
<p>并通过简单的加法来添加偏移量</p>
<pre><code>print cube + (10,100,1000)
array([[ 10, 100, 1000],
[ 10, 100, 1001],
[ 10, 101, 1000],
[ 10, 101, 1001],
[ 11, 100, 1000],
[ 11, 100, 1001],
[ 11, 101, 1000],
[ 11, 101, 1001]])
</code></pre>
<p>在您的情况下,它将转换为<code>cube + (x,y,z)</code>。你的代码非常紧凑的版本是</p>
<pre><code>import itertools, numpy
cube = numpy.array(list(itertools.product((0,1), (0,1), (0,1))))
x_dim = y_dim = z_dim = 10
for offset in itertools.product(*map(xrange, (x_dim, y_dim, z_dim))):
work_with_cube(cube+offset)
</code></pre>
<p><strong>编辑:<code>itertools.product</code>使产品覆盖不同的参数,即<code>itertools.product(a,b,c)</code>,因此我必须用as <code>*map(...)</code>传递<code>map(xrange, ...)</code></p>