I have difficulty understanding how numpy.transpose actually works. For example
a_value = array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
and when I do
np.transpose(a_value, (2, 1, 0))
I get
array([[[0, 4],
[2, 6]],
[[1, 5],
[3, 7]]])
How can I derive this transpose manually? I need to understand the formula or the steps intuitively in the above case so I can generalize it for higher dimensions.
As given in the documentation -
numpy.transpose(a, axes=None)
axes : list of ints, optional By default, reverse the dimensions, otherwise permute the axes according to the values given.
The second argument is the axes using which the values are permuted. That is for example if the index of initial element is (x,y,z)
(where x
is 0th axes, y
is 1st axes, and z
is 2nd axes) , the position of that element in the resulting array becomes (z,y,x) (that is 2nd axes first, then 1st axes, and last 0th axes) , based on the argument you provided for axes
.
Since you are transposing an array of shape (2,2,2)
, the transposed shape is also (2,2,2)
, and the positions would change as -
(0,0,0) -> (0,0,0)
(1,0,0) -> (0,0,1)
(0,1,0) -> (0,1,0)
(1,1,0) -> (0,1,1)
...
Since the axes you choose are trivial, lets explain this for another axes. Example -
In [54]: A = np.arange(30).reshape((2, 3, 5))
In [55]: A
Out[55]:
array([[[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14]],
[[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24],
[25, 26, 27, 28, 29]]])
In [56]: np.transpose(A,(1,2,0))
Out[56]:
array([[[ 0, 15],
[ 1, 16],
[ 2, 17],
[ 3, 18],
[ 4, 19]],
[[ 5, 20],
[ 6, 21],
[ 7, 22],
[ 8, 23],
[ 9, 24]],
[[10, 25],
[11, 26],
[12, 27],
[13, 28],
[14, 29]]])
Here, the first element (0,0,0)
becomes the (0,0,0)
element in the result.
The second element (0,0,1)
becomes the (0,1,0)
element in the result. And so on -
(0,0,0) -> (0,0,0)
(0,0,1) -> (0,1,0)
(0,0,2) -> (0,2,0)
...
(2,3,4) -> (3,4,2)
...
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With