如何使用单个循环遍历3d矩阵?

时间:2013-10-20 15:15:45

标签: algorithm loops multidimensional-array

由2维构成的矩阵如下:

for (i = 0; i <length*length; i++)
    Mat [i/length, i% length] = i;

那我如何循环一个3d矩阵呢?

for (i = 0; i <length*length*length; i++)
    Mat [?] = i;

2 个答案:

答案 0 :(得分:1)

for (i = 0; i <length*length*length; i++)
    q = i/(length*length);
    r = i%(length*length);
    Mat [q, r/length, r%length] = i;

<强>的Python

k = 3

for i in xrange(k * k * k):
    q = i / (k * k)
    r = i % (k * k)
    print q, r / k, r % k

<强>输出

0 0 0
0 0 1
0 0 2
0 1 0
0 1 1
0 1 2
0 2 0
0 2 1
0 2 2
1 0 0
1 0 1
1 0 2
1 1 0
1 1 1
1 1 2
1 2 0
1 2 1
1 2 2
2 0 0
2 0 1
2 0 2
2 1 0
2 1 1
2 1 2
2 2 0
2 2 1
2 2 2

答案 1 :(得分:1)

只需在基本长度中编写 index ,您就可以获得N维度的一般解决方案。

因此,对于3D,它将是

for (i = 0; i <length*length*length; i++)
     p = i;
     z = p % length;

     p /= length;
     y = p % length;

     p /= length;
     x = p;
     Mat [x, y, z] = i;

或者只是缩短

for (i = 0; i <length*length*length; i++)
     Mat[i / (length*length), (i/length) % length, i % length] = i