Search code examples
pythonpython-3.xnumpymatrixtranspose

How to transpose a 3D matrix?


I have a 3D matrix x_test of size (100, 33, 66) and I want to change its dimensions to (100, 66, 33).

What is the most efficient way to do this using python3.5? I look for something along those lines:

y = x_test.transpose()

Solution

  • You can pass the desired dimensions to the function np.transpose using in your case np.transpose(x_test, (0, 2, 1)).

    For example,

    import numpy as np
    
    x_test = np.arange(30).reshape(3, 2, 5)
    
    print(x_test)
    print(x_test.shape)
    

    This will print

    [[[ 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]]]
    (3, 2, 5)
    

    Now, you can transpose the matrix with the command from above

    y = np.transpose(x_test, (0, 2, 1))
    print(y)
    print(y.shape)
    

    which will give

    [[[ 0  5]
      [ 1  6]
      [ 2  7]
      [ 3  8]
      [ 4  9]]
    
     [[10 15]
      [11 16]
      [12 17]
      [13 18]
      [14 19]]
    
     [[20 25]
      [21 26]
      [22 27]
      [23 28]
      [24 29]]]
    (3, 5, 2)