I got a 3d-array
>>> a
array([[[[9, 6, 1],
[2, 8, 6],
[3, 5, 6]],
[[9, 1, 9],
[6, 6, 7],
[3, 0, 7]],
[[9, 2, 7],
[6, 1, 4],
[9, 2, 2]],
[[3, 7, 0],
[4, 0, 6],
[7, 4, 8]]]])
Now I want to reshape that array, that specific values are grouped together, i.e.
>>> a[0,:,0,0]
array([9, 9, 9, 3])
So basically, I want the first element of each box to be in one array, the second element of each box in another array and so on.
What I did so far is reshape it to the following:
>>> b = a[0,:,:,:].T
>>> b
array([[[9, 9, 9, 3],
[2, 6, 6, 4],
[3, 3, 9, 7]],
[[6, 1, 2, 7],
[8, 6, 1, 0],
[5, 0, 2, 4]],
[[1, 9, 7, 0],
[6, 7, 4, 6],
[6, 7, 2, 8]]])
This way the arrays get constructed already but the sorting is wrong. This way the 2x4 matrices are constructed row-wise. I want it to be constructed column-wise, that is, in this case, the following should be the first six rows:
>>> b[:,0,:]
array([[9, 9, 9, 3],
[6, 1, 2, 7],
[1, 9, 7, 0]])
>>> b[:,1,:]
array([[2, 6, 6, 4],
[8, 6, 1, 0],
[6, 7, 4, 6]])
I've been fiddling around with how to index that my array is constructed the right way. An intuitive way of thinking about the problem is considering the 3x3 matrices are stacked behind one another and I want to carve out 1x4 arrays going in z-direction (so into the pile) and put them into one array row-wise.
I mean I could iterate over them with a for-loop, but I'd rather vectorize the whole thing by indexing and slicing. Any help is appreciated! Thanks
np.concatenate([b[:,i,:] for i in range(3)])