Можно ли установить число в 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
.