Search code examples
memorynumpytranspose

Transpose array and actually reorder memory


I have a 3-D NumPy array, e.g.

a = np.random.random((2,3,5))

I would like to transpose the last two axes, i.e.

b = a.transpose(0,2,1)

However, I do not want a view with twiddled strides! I want to actually copy the array and reorder it in memory. What is the best way to achieve this?


Solution

  • The copy() method will reorder to C-contiguous order by default:

    b = a.transpose(0,2,1).copy()
    

    Be careful: the copy() function has a different default behavior. With the function, you must explicitly specify the order to ensure a C-contiguous copy:

    b = np.copy(a.transpose(0,2,1), order='C')
    

    (Note that the docstring for the function says that the ndarray method is the preferred method for creating an array copy.)