2011-03-25 24 views
110

¿Es posible establecer un elemento de una matriz en NaN en Python?python nan and inf values ​​

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?

+3

http://stackoverflow.com/questions/944700/ dice cómo verificar NaN Para Inf y -si puede probar con == pero eso no funciona para NaN debido a las reglas IEEE754 para NaN. –

+0

Creo que la forma más confiable es usar funciones adecuadas como 'isinf' e' isnan' proporcionadas por 'numpy'. Ver mi respuesta a continuación. –

Respuesta

155

moldeada de cadena usando float():

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

¡Eso me enseñará a no saltar con una broma antes de leer la pregunta por segunda vez! ¡Lo siento! Dicho esto, no estaría de más decirlo así porque es una trampa fácil de caer, NaN! = NaN –

+1

también tenga en cuenta: >>> float ('Inf') - float ('Inf') === > nan – ntg

47

sí, se puede utilizar 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 
+17

En python> = 2.6, puede usar 'math.isnan()' y 'math.isinf()' – Agos

1

Al utilizar Python 2.4, intente

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

Estoy frente a la cuestión cuando estaba portar el simplejson a un dispositivo integrado que ejecuta el Python 2.4, float("9e999") arreglado. No use inf = 9e999, necesita convertirlo de cadena. -inf da el -Infinity.

2

¿Es posible establecer un elemento de una matriz en NaN en Python?

Sí, siempre se puede incluir una o NaNinf en un pitón list (y similares). Sin embargo, si desea incluirlo en un 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 -module math contiene constants for nan and inf (since Python 3.5) así como algunas funciones (disponible desde Python 2.6) Para comprobar estos:

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 comprobar si un número es noinf o nan: math.isfinite (disponible para Python 3.2+)

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