[Numpy-discussion] NumPy Feature Request: Function to wrap angles to range [ 0, 2*pi] or [ -pi, pi ]

Thomas thomasbbrunner at gmail.com
Tue Nov 24 04:25:57 EST 2020


Like Nathaniel said, it would not improve much when compared to the modulo
operator.

It could handle the edge cases better, but really the biggest benefit would
be that it is more convenient.

And as the "unwrap" function already exists, people would expect that and
look for a function for the inverse operation (at least I did).

On Tue, 24 Nov 2020 at 09:22, Daniele Nicolodi <daniele at grinta.net> wrote:

> On 24/11/2020 02:49, Nathaniel Smith wrote:
> > How would this proposed function compare to using the modulo operator,
> > like 'arr % (2*pi)'?
>
> I wrote almost the same word bu word reply, before realizing that taking
> the modulo looses the sign. The correct operation is slightly more
> complex (untested):
>
> def wrap(alpha):
>     return (alpha + np.pi) % 2.0 * np.pi - np.pi
>
> However, I don't think there is much value in adding something so
> trivial as a function to numpy: I cannot think to any commonly used
> algorithm that requires wrapping the phase, and it is going to be an
> infinite source of bikesheeding whether the wrapped range should be
> [-pi, pi) or (-pi, pi] or (0, 2*pi] or [0, 2*pi)
>
> Cheers,
> Dan
>
>
> > On Mon, Nov 23, 2020, 16:13 Thomas <thomasbbrunner at gmail.com
> > <mailto:thomasbbrunner at gmail.com>> wrote:
> >
> >     Hi,
> >
> >     I have a proposal for a feature and I hope this is the right place
> >     to post this.
> >
> >     The idea is to have a function to map any input angle to the range
> >     of [ 0, 2*pi ] or [ - pi, pi ].
> >
> >     There already is a function called 'unwrap' that does the opposite,
> >     so I'd suggest calling this function 'wrap'.
> >
> >     Example usage:
> >     # wrap to range [ 0, 2*pi ]
> >     >>> np.wrap([ -2*pi, -pi, 0, 4*pi ])
> >     [0, pi, 0, 2*pi]
> >
> >     There is some ambiguity regarding what the solution should be for
> >     the extremes. An example would be an input of 4*pi, as both 0 and
> >     2*pi would be valid mappings.
> >
> >     There has been interest for this topic in the community
> >     (see
> https://stackoverflow.com/questions/15927755/opposite-of-numpy-unwrap
> >     <
> https://stackoverflow.com/questions/15927755/opposite-of-numpy-unwrap>).
> >
> >     Similar functions exist for Matlab
> >     (see https://de.mathworks.com/help/map/ref/wrapto2pi.html
> >     <https://de.mathworks.com/help/map/ref/wrapto2pi.html>). They solved
> >     the ambiguity by mapping "positive multiples of 2*pi map to 2*pi and
> >     negative multiples of 2*pi map to 0." for the 0 to 2*pi case.
> >     _______________________________________________
> >     NumPy-Discussion mailing list
> >     NumPy-Discussion at python.org <mailto:NumPy-Discussion at python.org>
> >     https://mail.python.org/mailman/listinfo/numpy-discussion
> >     <https://mail.python.org/mailman/listinfo/numpy-discussion>
> >
> >
> > _______________________________________________
> > NumPy-Discussion mailing list
> > NumPy-Discussion at python.org
> > https://mail.python.org/mailman/listinfo/numpy-discussion
> >
>
> _______________________________________________
> NumPy-Discussion mailing list
> NumPy-Discussion at python.org
> https://mail.python.org/mailman/listinfo/numpy-discussion
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mail.python.org/pipermail/numpy-discussion/attachments/20201124/624bab33/attachment-0001.html>


More information about the NumPy-Discussion mailing list