Access all elements at given x, y position in 3-dimensional numpy array
<pre><code>mat_a = np.random.random((5, 5))
mat_b = np.random.random((5, 5))
mat_c = np.random.random((5, 5))
bigmat = np.stack((mat_a, mat_b, mat_c)) # this is a 3, 5, 5 array

for (x, y, z), value in np.ndenumerate(bigmat):
    print (x, y, z)
</code></pre>

<p>In the example above, how can I loop so that I iterate only across the 5 x 5 array and at each position I get 3 values i.e. loop should run 25 times and each time, I get an array with 3 values (one from each of mat_a, mat_b and mat_c)</p>

<ul>
<li>EDIT: Please note that I need to be able to access elements by position later i.e. if <code>bigmat</code> is reshaped, there should be a way to access element based on specific y, z</li>
</ul>

<p>Simon's answer is fine. If you reshape things properly you can get them all in a nice array without any looping. </p>

<pre><code>In [33]: bigmat
Out[33]: 
array([[[ 0.51701737,  0.90723012,  0.42534365,  0.3087416 ,  0.44315561],
        [ 0.3902181 ,  0.59261932,  0.21231607,  0.61440961,  0.24910501],
        [ 0.63911556,  0.16333704,  0.62123781,  0.6298554 ,  0.29012245],
        [ 0.95260313,  0.86813746,  0.26722519,  0.14738102,  0.60523372],
        [ 0.33189713,  0.6494197 ,  0.30269686,  0.47312059,  0.84690451]],

       [[ 0.95974972,  0.09659425,  0.06765838,  0.36025411,  0.91492751],
        [ 0.92421874,  0.31670119,  0.99623178,  0.30394588,  0.30970197],
        [ 0.53590091,  0.04273708,  0.97876218,  0.09686119,  0.78394054],
        [ 0.5463358 ,  0.29239676,  0.6284822 ,  0.96649507,  0.05261606],
        [ 0.91733464,  0.77312656,  0.45962704,  0.06446105,  0.58643379]],

       [[ 0.75161903,  0.43286354,  0.09633492,  0.52275049,  0.40827006],
        [ 0.51816158,  0.05330978,  0.49134325,  0.73652136,  0.14437844],
        [ 0.83833791,  0.2072704 ,  0.18345275,  0.57282927,  0.7218022 ],
        [ 0.56180415,  0.85591746,  0.35482315,  0.94562085,  0.92706479],
        [ 0.2994697 ,  0.99724253,  0.66386017,  0.0121033 ,  0.43448805]]])
</code></pre>

<p>Reshaping things...</p>

<pre><code>new_bigmat =  bigmat.T.reshape([25,3])

In [36]: new_bigmat
Out[36]: 
array([[ 0.51701737,  0.95974972,  0.75161903],
       [ 0.3902181 ,  0.92421874,  0.51816158],
       [ 0.63911556,  0.53590091,  0.83833791],
       [ 0.95260313,  0.5463358 ,  0.56180415],
       [ 0.33189713,  0.91733464,  0.2994697 ],
       [ 0.90723012,  0.09659425,  0.43286354],
       [ 0.59261932,  0.31670119,  0.05330978],
       [ 0.16333704,  0.04273708,  0.2072704 ],
       [ 0.86813746,  0.29239676,  0.85591746],
       [ 0.6494197 ,  0.77312656,  0.99724253],
       [ 0.42534365,  0.06765838,  0.09633492],
       [ 0.21231607,  0.99623178,  0.49134325],
       [ 0.62123781,  0.97876218,  0.18345275],
       [ 0.26722519,  0.6284822 ,  0.35482315],
       [ 0.30269686,  0.45962704,  0.66386017],
       [ 0.3087416 ,  0.36025411,  0.52275049],
       [ 0.61440961,  0.30394588,  0.73652136],
       [ 0.6298554 ,  0.09686119,  0.57282927],
       [ 0.14738102,  0.96649507,  0.94562085],
       [ 0.47312059,  0.06446105,  0.0121033 ],
       [ 0.44315561,  0.91492751,  0.40827006],
       [ 0.24910501,  0.30970197,  0.14437844],
       [ 0.29012245,  0.78394054,  0.7218022 ],
       [ 0.60523372,  0.05261606,  0.92706479],
       [ 0.84690451,  0.58643379,  0.43448805]])
</code></pre>

<p>Edit: To keep track of indices, you might try the following (open to other ideas here). Each row in <code>xy_index</code> gives your x,y values respectively for the corresponding row in the <code>new_bigmat</code> array. This answer doesn't require any loops. If looping is acceptable you can borrow Simon's suggestion in the comments or <code>np.ndindex</code> as suggested in hpaulj's answer.</p>

<pre><code>row_index, col_index = np.meshgrid(range(5),range(5))
xy_index = np.array([row_index.flatten(), col_index.flatten()]).T

In [48]: xy_index
Out[48]: 
array([[0, 0],
       [1, 0],
       [2, 0],
       [3, 0],
       [4, 0],
       [0, 1],
       [1, 1],
       [2, 1],
       [3, 1],
       [4, 1],
       [0, 2],
       [1, 2],
       [2, 2],
       [3, 2],
       [4, 2],
       [0, 3],
       [1, 3],
       [2, 3],
       [3, 3],
       [4, 3],
       [0, 4],
       [1, 4],
       [2, 4],
       [3, 4],
       [4, 4]])
</code></pre>

python numpy