Можно ли установить число в NaN или бесконечность?

можно ли установить элемент массива NaN в Python?

кроме того, можно ли установить переменную в +/- бесконечность? Если да, то есть ли функция, чтобы проверить, является ли число Бесконечностью или нет?

4 ответов


Cast из строки с помощью float():

>>> float('NaN')
nan
>>> float('Inf')
inf
>>> -float('Inf')
-inf
>>> float('Inf') == float('Inf')
True
>>> float('Inf') == 1
False

Да, вы можете использовать numpy для этого.

import numpy as np
a = arange(3,dtype=float)

a[0] = np.nan
a[1] = np.inf
a[2] = -np.inf

a # is now [nan,inf,-inf]

np.isnan(a[0]) # True
np.isinf(a[1]) # True
np.isinf(a[2]) # True

можно ли установить элемент массива в NaN в Python?

Да, вы всегда можете включить NaN или inf в python list (и подобные). Однако, если вы хотите включить его в array (например,array.array или numpy.array), то тип массива должны быть float или complex!

>>> import math
>>> import numpy as np

>>> arr = np.ones(1, float)  # float array
>>> arr[0] = math.nan
>>> arr
array([ nan])

>>> [math.nan, math.inf, -math.inf]  # python list
[nan, inf, -inf]

на math-модуль содержит константы для nan и inf (начиная с Python 3.5) а также некоторые функции (доступные с Python 2.6), чтобы проверить их:

math.isnan проверяет, является ли значение nan:

>>> math.isnan(math.nan)   # nan
True

math.isinf проверяет, является ли значение бесконечностью (положительным или отрицательным):

>>> math.isinf(math.inf)   # positive infinity
True
>>> math.isinf(-math.inf)  # negative infinity
True

и функция, которая может проверить, является ли число не inf или nan: math.isfinite (доступно для Python 3.2+)

>>> math.isfinite(math.inf)
False
>>> math.isfinite(math.nan)
False
>>> math.isfinite(11.2)
True

при использовании Python 2.4, попробовать

inf = float("9e999")
nan = inf - inf

я сталкиваюсь с проблемой, когда я портировал simplejson на встроенное устройство, на котором работает Python 2.4,float("9e999") исправил. Не используйте inf = 9e999, вам нужно преобразовать его в строку. -inf дает -Infinity.