Нэн с Python 2.5 на Windows - PullRequest
       17

Нэн с Python 2.5 на Windows

3 голосов
/ 29 марта 2012

Как мне создать Nan с Python 2.5 в Windows?

float('nan') завершается с ошибкой ValueError: invalid literal for float(): nan

Сводка ответов: Ни float('inf'), ни float('nan') не работают с Python 2.5 и Windows. Эта ошибка была исправлена ​​в Python 2.6.

Если вы используете numpy, тогда вы можете использовать numpy.inf и numpy.nan.

Если вам нужен обходной путь без numpy, вы можете использовать выражение с переполнением, такое как 1e1000, чтобы получить inf, и 1e1000 / 1e1000 или 1e1000 - 1e1000, чтобы получить nan.

Ответы [ 3 ]

3 голосов
/ 29 марта 2012

Другой способ разделить inf на себя:

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

Или, более неясным образом, который может не работать на разных платформах (но работает вокруг этой конкретной ошибки в Python 2.5 в Windows):

>>> 1e31337 / 1e31337
nan
>>> 1e31337 - 1e31337
nan
1 голос
/ 29 марта 2012

Уже есть принятый ответ на этот вопрос, но я думаю следующее должно работать, если вы не хотите полагаться на переполнение и у вас установлена ​​numpy ... (не проверено, поскольку я не 'есть python2.5 или windows)

>>> import numpy as np
>>> np.nan
nan
>>> np.inf
inf
0 голосов
/ 29 марта 2012

Обновите ваш дистрибутив Python, если это возможно. Указанное вами поведение считается ошибкой. (Примечание: Cython ссылка.)

Канонически Python должен поддерживать это определение nan в кресте-платформенная манера.Такое поведение, по-видимому, было исправлено в Python 2.6 и 3.0.

( Дополнительное чтение )


Конечно, это работает в версиях Python для Linux:

$ 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
...