2012-03-28 13 views
3

Wie erstelle ich ein Nan mit Python 2.5 unter Windows?Nan mit Python 2.5 unter Windows

float('nan') schlägt mit dem Fehler ValueError: invalid literal for float(): nan

Zusammenfassung der Antworten: Weder float('inf') noch float('nan') Arbeiten mit Python 2.5 und Windows. Dies ist ein Fehler, der in Python 2.6 behoben wurde. Wenn Sie numpy verwenden, können Sie numpy.inf und numpy.nan verwenden.

Wenn Sie eine Abhilfe ohne numpy benötigen, dann können Sie einen Ausdruck verwenden, wie 1e1000 sprudeln eine inf zu bekommen, und 1e1000/1e1000 oder 1e1000 - 1e1000 einen nan zu bekommen.

Antwort

3

Ein anderer Weg inf selbst spaltet:

>>> float('inf')/float('inf') 
nan 

Oder in einer obskuren Weise, die plattformübergreifend funktionieren möglicherweise nicht (wohl aber um diesen bestimmten Fehler in Python 2.5 unter Windows):

>>> 1e31337/1e31337 
nan 
>>> 1e31337 - 1e31337 
nan 
+0

Ich habe es getestet und es funktioniert! Vielen Dank. – user763305

+0

Warum nicht nur 1e1000/1e1000? Der Punkt ist, dass 1e1000 überläuft und inf und inf/inf ist nan. – user763305

+0

@user: 1e1337 sieht besser für mich aus. Ich habe hauptsächlich das 'inf/inf' hinzugefügt, um klar zu machen, warum die zweite Version funktioniert. –

0

Aktualisieren Sie Ihre Python-Distribution nach Möglichkeit. The behavior you listed is considered a bug. (Hinweis: Cython Link.)

Canonisch soll Python diese Definition von nan in einer plattformübergreifenden Weise unterstützen. Dieses Verhalten scheint in Python 2.6 und 3.0 behoben worden zu sein.

(Additional reading)


Natürlich funktioniert dies in den Linux-Versionen von Python:

$ python2.4 
Python 2.4.3 (#1, Sep 21 2011, 19:55:41) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> float('nan') 
nan 

$ python2.5 
Python 2.5.2 (r252:60911, Jun 26 2008, 10:20:40) 
[GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> float('nan') 
nan 
+0

Ich schreibe keine App, ich schreibe eine Bibliothek, die ich anderen Entwicklern kostenlos zur Verfügung stellen werde, einschließlich der armen Seelen, die mit Python 2.5 feststecken. – user763305

+0

@ user763305 Dann, yup, [dies] (http://Stackoverflow.com/a/9916007/517815) ist der Weg zu gehen. :) – MrGomez

1

Es gibt bereits eine akzeptierte Antwort auf diese Frage, aber ich denke, die folgende sollte funktionieren, wenn du dich nicht auf einen Überlauf verlassen willst und numpy installiert hast ... (nicht getestet, da ich python2.5 oder windows nicht habe)

>>> import numpy as np 
>>> np.nan 
nan 
>>> np.inf 
inf 
+0

Es funktioniert. Ich habe mit Python 2.5 unter Windows getestet. Ich habe die Frage aktualisiert. – user763305