[Numpy-discussion] annoying numpy string to float conversion behaviour

Torgil Svensson torgil.svensson@gmail....
Thu Jun 21 16:45:07 CDT 2007


Have you specific insights in Python 3k regarding this?  I assume 3k
is the next millenium. Maybe they can accept patches before that.

//Torgil


On 6/20/07, Matthieu Brucher <matthieu.brucher@gmail.com> wrote:
> Hi,
>
> This was discussed some time ago (I started it because I had exactly the
> same problem), numpy is not responsible for this, Python is. Python uses the
> C standard library and in C by MS, NaN and Inf can be displayed, but not
> read from a string, so this is the behaviour displayed here.
> Wait for Python 3k...
>
> Matthieu
>
> 2007/6/20, Torgil Svensson <torgil.svensson@gmail.com>:
> >
> > Hi
> >
> > Is there a reason for numpy.float not to convert it's own string
> > representation correctly?
> >
> > Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit
> > (Intel)] on win32>>> import numpy
> > >>> numpy.__version__
> > '1.0.3'
> > >>> numpy.float("1.0")
> > 1.0
> > >>> numpy.nan
> > -1.#IND
> > >>> numpy.float("-1.#IND")
> > Traceback (most recent call last):
> > File "<pyshell#20>", line 1, in <module>
> >    numpy.float("-1.#IND")
> > ValueError: invalid literal for float(): -1.#IND
> > >>>
> >
> > Also, nan and -nan are represented differently for different float to
> > string conversion methods. I guess the added zeros are a bug
> > somewhere.
> > >>> str(nan)
> > '-1.#IND'
> > >>> "%f" % nan
> > '-1.#IND00'
> > >>> str(-nan)
> > '1.#QNAN'
> > >>> "%f" % -nan
> > '1.#QNAN0'
> >
> > This is a problem when floats are stored in text-files that are later
> > read to be numerically processed. For now I use the following to
> > convert the number.
> >
> > special_numbers=dict([('-1.#INF',-inf),('1.#INF',inf),
> >                       ('-1.#IND',nan),('-1.#IND00',nan),
> >
> ('1.#QNAN',-nan),('1.#QNAN0',-nan)])
> > def string_to_number(x):
> >    if x in special_numbers:
> >        return special_numbers[x]
> >    return float(x) if ("." in x) or ("e" in x) else int(x)
> >
> > Is there a simpler way that I missed?
> >
> > Best Regards,
> >
> > //Torgil
> > _______________________________________________
> > Numpy-discussion mailing list
> > Numpy-discussion@scipy.org
> >
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
> >
>
>
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion
>
>


More information about the Numpy-discussion mailing list