# Assign NaN, get zero

Keith Goodman kwgoodman at gmail.com
Sat Nov 11 15:59:40 CST 2006

```On 11/11/06, Stefan van der Walt <stefan at sun.ac.za> wrote:
> On Sat, Nov 11, 2006 at 10:40:22AM -0800, Keith Goodman wrote:
> > I accidentally wrote a unit test using int32 instead of float64 and
> > ran into this problem:
> >
> > >> x = M.matrix([[1, 2, 3]])
> > >> x[0,1] = M.nan
> > >> x
> > matrix([[1, 0, 3]])   <--- Got 0 instead of NaN
> >
> > But this, of course, works:
> >
> > >> x = M.matrix([[1.0, 2.0, 3.0]])
> > >> x[0,1] = M.nan
> > >> x
> > matrix([[ 1.        ,         nan,  3.        ]])
> >
> > Is returning a 0 instead of NaN the expected behavior?
>
> NaN (or inf) is a floating point number, so seeing a zero in integer
> representation seems correct:
>
> In [2]: int(N.nan)
> Out[2]: 0L

Would it make sense to upcast instead of downcast?

This upcasts:

>> x = M.matrix([[1, M.nan, 3]])
>> x
matrix([[ 1.        ,         nan,  3.        ]])

But this doesn't:

>> x = M.matrix([[1, 2, 3]])
>> x[0,1] = M.nan
>> x
matrix([[1, 0, 3]])

(BTW, how do you represent missing integers if you can't use NaN?)

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier