numpy: handling float('NaN') different in XP vs. Linux

Dan Bishop danb_83 at yahoo.com
Sat Jun 14 06:03:09 CEST 2008


On Jun 13, 10:45 pm, "John [H2O]" <washa... at gmail.com> wrote:
> I have a script:
>
> from numpy import float
> OutD=[]
> v=['3','43','23.4','NaN','43']
> OutD.append([float(i) for i in v[1]])
>
> On linux:
> Python 2.5.1 (r251:54863, Mar  7 2008, 04:10:12)
> [GCC 4.1.3 20070929 (prerelease) (Ubuntu 4.1.2-16ubuntu2)] on linux2
> [john at andLinux analysis]$ python jnk.py
> [[3.0, 43.0, 23.399999999999999, nan, 43.0]]
>
> On XP:
> Python 2.5 (r25:51908, Mar  9 2007, 17:40:28) [MSC v.1310 32 bit (Intel)]
> Microsoft Windows XP [Version 5.1.2600]
> (C) Copyright 1985-2001 Microsoft Corp.
>
> C:\analysis>C:\Python25\python.exe jnk.py
> Traceback (most recent call last):
>   File "jnk.py", line 4, in <module>
>     OutD.append([float(i) for i in v])
> ValueError: invalid literal for float(): NaN

Python just uses the atof() function from the underlying C library.
Some of them handle NaN's, and some of them don't.

If you want to get NaN on a platform where float('NaN') doesn't work,
try 1e1000 / 1e1000.  Or failing that, struct.unpack('d',
struct.pack('Q', 0xfff8000000000000))[0]



More information about the Python-list mailing list