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?
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.)
Under the hood, the stride of b is different than a.
prefer to use ascontiguousarray, which will copy the memory when it's needed. Whereas copy
will always copy memory.
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