python - ¿Es posible establecer un número a NaN o infinito?
subplot python (4)
¿Es posible establecer un elemento de una matriz en NaN en Python?
Sí, siempre puede incluir un NaN
o inf
en una list
Python (y similares). Sin embargo, si desea incluirlo en una array
(por ejemplo array.array
o numpy.array
), entonces el tipo de la matriz debe ser float
o 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]
El módulo math
contiene constantes para nan
e inf
(desde Python 3.5) así como algunas funciones (disponibles desde Python 2.6) para verificarlas:
math.isnan
comprueba si el valor es nan
:
>>> math.isnan(math.nan) # nan
True
math.isinf
comprueba si el valor es infinito (positivo o negativo):
>>> math.isinf(math.inf) # positive infinity
True
>>> math.isinf(-math.inf) # negative infinity
True
Y una función que puede verificar si un número no es inf
o nan
: math.isfinite
(disponible para Python 3.2+)
>>> math.isfinite(math.inf)
False
>>> math.isfinite(math.nan)
False
>>> math.isfinite(11.2)
True
¿Es posible establecer un elemento de una matriz en NaN
en Python?
Además, ¿es posible establecer una variable a +/- infinito? Si es así, ¿hay alguna función para verificar si un número es infinito o no?
Cuando usas Python 2.4, prueba
inf = float("9e999")
nan = inf - inf
Me enfrento al problema cuando estaba transfiriendo el archivo simplejson a un dispositivo integrado que ejecutaba Python 2.4, float("9e999")
lo float("9e999")
. No use inf = 9e999
, necesita convertirlo de cadena. -inf
da el -Infinity
.
Sí, puedes usar numpy
para eso.
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
Transmitir desde cadena usando float()
:
>>> float(''NaN'')
nan
>>> float(''Inf'')
inf
>>> -float(''Inf'')
-inf
>>> float(''Inf'') == float(''Inf'')
True
>>> float(''Inf'') == 1
False