[Numpy-discussion] ufunc oddities

Charles R Harris charlesr.harris at gmail.com
Sat May 24 22:37:57 EDT 2008


On Sat, May 24, 2008 at 8:25 PM, Robert Kern <robert.kern at gmail.com> wrote:

> On Sat, May 24, 2008 at 9:09 PM, Charles R Harris
> <charlesr.harris at gmail.com> wrote:
> >
> > On Sat, May 24, 2008 at 7:47 PM, Robert Kern <robert.kern at gmail.com>
> wrote:
> >>
> >> On Sat, May 24, 2008 at 8:31 PM, Charles R Harris
> >> <charlesr.harris at gmail.com> wrote:
> >> > Hi All,
> >> >
> >> > I'm writing tests for ufuncs and turned up some oddities:
> >> >
> >> > In [4]: degrees(True)
> >> > Out[4]: 57.29578
> >> >
> >> > In [5]: radians(True)
> >> > Out[5]: 0.017453292
> >> >
> >> > In [6]: sin(True)
> >> > Out[6]: 0.84147096
> >> >
> >> > Do we want numeric functions to apply to booleans?
> >>
> >> I don't see a good reason to prevent it. They are just 0 and 1 under
> >> the covers and behave like it everywhere else (e.g. True + True == 2
> >> and the very useful boolean_mask.sum()).
> >
> > True + True == 1
>
> No, True + True == 2. Try it. We might have made boolean arrays behave
> differently than Python bool objects, but that's not what I wrote.
>

Robert, the C code in the inner loop is generated with

/**begin repeat

   #TYPE=(BOOL,
BYTE,UBYTE,SHORT,USHORT,INT,UINT,LONG,ULONG,LONGLONG,ULONGLONG,FLOAT,DOUBLE,LONGDOUBLE)*2#
   #OP=||, +*13, ^, -*13#
   #kind=add*14, subtract*14#
   #typ=(Bool, byte, ubyte, short, ushort, int, uint, long, ulong, longlong,
ulonglong, float, double, longdouble)*2#
*/

Note that || is not the same as +. Also note that subtract is implemented as
xor.

Chuck
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080524/2aff35f6/attachment.html>


More information about the NumPy-Discussion mailing list