[Numpy-discussion] numpy.arccos(numpy.inf)????

Robert Kern robert.kern@gmail....
Fri May 16 13:37:08 CDT 2008


On Fri, May 16, 2008 at 11:47 AM, Stuart Brorson <sdb@cloud9.net> wrote:
> Hi --
>
> Sorry to be a pest with corner cases, but I found another one.
>
> In this case, if you try to take the arccos of numpy.inf in the
> context of a complex array, you get a bogus return (IMO).  Like this:
>
> In [147]: R = numpy.array([1, numpy.inf])
>
> In [148]: numpy.arccos(R)
> Warning: invalid value encountered in arccos
> Out[148]: array([  0.,  NaN])
>
> In [149]: C = numpy.array([1+1j, numpy.inf])
>
> In [150]: numpy.arccos(C)
> Warning: invalid value encountered in arccos
> Out[150]: array([ 0.90455689-1.06127506j,         NaN       -Infj])
>
> The arccos(numpy.inf) in the context of a real array is OK, but taking
> arcocs(numpy.inf) in the context of a complex array should return
> NaN + NaNj, IMO.
>
> Thoughts?

Hmm, this works fine on OS X. This may be a problem with one of the
lower-level math functions which we defer to the platform.


In [1]: from numpy import *

In [2]: arccos(nan+nan*1j)
Out[2]: (nan+nanj)

In [3]: arccos(nan+0j)
Out[3]: (nan+nanj)

In [4]: arccos(nan)
Out[4]: nan

In [5]: arccos([1.0+0j, nan])
Out[5]: array([  0. -0.j,  NaN NaNj])


The implementations of the complex versions are in umathmodule.c.src
(for the expanded versions, see umathmodule.c after building); they
are all prefixed with "nc_". E.g. the following are calling nc_acos()
for doubles. Here is the source:

static void
nc_acos(cdouble *x, cdouble *r)
{
    nc_prod(x,x,r);
    nc_diff(&nc_1, r, r);
    nc_sqrt(r, r);
    nc_prodi(r, r);
    nc_sum(x, r, r);
    nc_log(r, r);
    nc_prodi(r, r);
    nc_neg(r, r);
    return;
    /* return nc_neg(nc_prodi(nc_log(nc_sum(x,nc_prod(nc_i,
       nc_sqrt(nc_diff(nc_1,nc_prod(x,x))))))));
    */
}

I suspect the problem comes from the nc_log() which calls your
platform's atan2() for the imaginary part of the result.

-- 
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
 -- Umberto Eco


More information about the Numpy-discussion mailing list