Issue
So I was experimenting with numpy and I ran across a strange (?) behavior in the rollaxis method.
In [81]: a = np.ones((4, 3, 2))
In [82]: a.shape
Out[82]: (4, 3, 2)
In [83]: x = np.rollaxis(a, 2)
In [84]: x.shape
Out[84]: (2, 4, 3)
In [85]: np.rollaxis(x, -2).shape
Out[85]: (4, 2, 3)
Shouldn't the -2 reverse the rollaxis? What I'm trying to do is apply a matrix that can only be applied when the 2 coordinate is first. But then I want to put my array back into its original form. The only things which I have found to work are applying np.rollaxis(x, 2)
twice, or applying np.rollaxis(x, 0, start=3)
. I just found these by guessing and I have no idea why they work. They also seem to be obscuring what I'm really trying to do. Could somebody please explain the way that I should 'reverse' a roll, or what I'm doing wrong?
(Is there a pythonic way to do this?)
Solution
The method rollaxis
def rollaxis(a, axis, start=0):
reallocates the chosen axis
at the start
"position"
Following your example:
a = np.ones((4, 3, 2))
x = np.rollaxis(a, 2)
# x.shape = (2, 4, 3)
Concerning shapes: rollaxis
will bring the number 2
, which is in your last axis=2
, to the the first position, since start=0
.
By using
x2 = np.rollaxis(x, -2)
# x2.shape = (4,2,3)
rollaxis
will bring the number 4, which is the second last axis, axis=-2
, and reallocate at the first position, since start=0
. That explains your result (4,2,3)
, instead of (4,3,2)
.
Following the same logic, this explains why applying rollaxis(a,2)
twice brings the array shape back to the initial one. np.rollaxis(x, 0, start=3)
also works because the first axis goes to the last one, in other words the number 2 in (2,4,3) goes to the last position resulting (4,3,2).
Answered By - mrcl
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.