On Wed, Sep 22, 2010 at 4:14 AM, Anne Archibald <[email protected]>wrote:
> Hi Ken, > > This is a tricky one. The current behaviour of rollaxis is to remove > the requested axis from the list of axes and then insert it before the > axis specified. This is exactly how python's list insertion works: > > In [1]: a = range(10) > > In [3]: a.insert(-1,'a') > > In [4]: a > Out[4]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 'a', 9] > > And indeed, there's no clean way to add something to the end of a list > using insert (apart from the obvious a.insert(len(a),'b') ). For this > you have .append(). Unfortunately numpy's rollaxis, while it agrees > with insert in its behaviour, doesn't have a move_axis_to_end. The > situation is also somewhat muddied by the fact that rollaxis also > removes the axis from the original list of axes, so that the > interpretation of index numbers is a little more subtle. But I think > your suggested behaviour would be confusing because of the conflict > with python's insert. How about allowing the string "end" as an > argument to rollaxis to specify that the axis should go at the end? > Allowing "end" is an easy solution, but note that moving an axis to the end is already possible: >>> a = np.ones((3,4,5,6)) >>> np.rollaxis(a, 2, len(a)+1).shape # roll axis to to last position (3, 4, 6, 5) Not consistent with insert though, there you would use len(a) instead of len(a)+1. It's a little ugly, but perhaps just documenting this is no worse than allowing a string or adding yet another function. Ralf > Anne > > On 21 September 2010 15:48, Ken Basye <[email protected]> wrote: > > Hi Numpy Folks, > > A while back, I filed this ticket: > > http://projects.scipy.org/numpy/ticket/1441 suggesting a change to > > rollaxis() and some fixes to the doc and error reporting. Ralf Gommers > > suggested I float the behavior change here, so that's what I'm doing. > > > > The motivation for the change comes because it seems like there should > > be a simpler way to get some axis into the last position than to do this: > > > > >>> a = np.ones((3,4,5,6)) > > >>> b = np.rollaxis(a, axis=0, start=len(a.shape)) > > >>> b.shape > > (4, 5, 6, 3) > > > > But currently it seems there isn't because when you specify -1 as the > > 'start' argument, the axis is moved into the second-to-last position. > > My proposed change, which you can see on the ticket, would change that > > so that using -1 referred to the end position. Note that the use of > > negative 'start' arguments isn't currently documented and, in its > > current form, doesn't seem very useful. My proposal wouldn't change the > > behavior for positive 'start' values at all, and the interpretation of > > 'axis' arguments is also unaffected. > > > > If that's going to break too much code, here's a pathway that might be > > acceptable: Add a new function moveaxis() which works the way > > rollaxis() does for positive arguments but in the new way for negative > > arguments. Eventually, rollaxis could be deprecated to keep things > > tidy. This has the added advantage of using a name that seems to fit > > what the function does better - 'rollaxis' suggests a behavior like the > > roll() function which affects other axes, which isn't what happens. > > > > Thanks for listening; I'm a big fan of Numpy. > > > > Best, > > Ken Basye > > > > > > _______________________________________________ > > NumPy-Discussion mailing list > > [email protected] > > http://mail.scipy.org/mailman/listinfo/numpy-discussion > > > _______________________________________________ > NumPy-Discussion mailing list > [email protected] > http://mail.scipy.org/mailman/listinfo/numpy-discussion >
_______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
