I'm working with an n-dimensional array, and I'd like a way to reverse a numbered dimension. So rather than
rev = a[:,:,::-1]
I'd like to be able to write
rev = a.reverse(dimension=2)
or something similar. I can't seem to find examples that don't rely on the former syntax.
If you browse the numpy (python) source code you'll find a trick they use to write functions that operate on a particular axis is to use np.swapaxes
to put the target axis in the axis = 0
position. Then they write code that operates on the 0-axis
, and then they use np.swapaxes
again to put the 0-axis
back in its original position.
You can do that here like so:
import numpy as np
def rev(a, axis = -1):
a = np.asarray(a).swapaxes(axis, 0)
a = a[::-1,...]
a = a.swapaxes(0, axis)
return a
a = np.arange(24).reshape(2,3,4)
print(rev(a, axis = 2))
yields
[[[ 3 2 1 0]
[ 7 6 5 4]
[11 10 9 8]]
[[15 14 13 12]
[19 18 17 16]
[23 22 21 20]]]
For anyone coming across this in the future:
Numpy 1.12+ has the function np.flip(array, dimension)
, which does exactly as requested. Even better, it returns a view of the data rather than a copy, and so it happens in constant time.
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