2011-03-25 93 views
110

是否可以在Python中將數組的元素設置爲NaNpython nan和inf值

此外,是否可以將變量設置爲+/-無窮大?如果是這樣,是否有任何功能來檢查一個數字是否無窮大?從字符串中使用float()

+3

http://stackoverflow.com/questions/944700/告訴你如何檢查NaN。對於Inf和-Inf,您可以使用==進行測試,但由於NaN的IEEE754規則,對於NaN不起作用。 – 2011-03-25 22:27:00

+0

我認爲最可靠的方法是使用像'numpy'提供的'isinf'和'isnan'這樣的函數。請參閱下面的答案。 – 2011-03-26 14:51:37

回答

155

演員:

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

這會教會我不要在第二次閱讀問題之前用簡單的方法跳進來!抱歉!也就是說,說這樣都不會有什麼不好,因爲這是一個容易陷入的陷阱,NaN!= NaN – 2011-03-25 22:30:23

+1

也注意到:>>> float('Inf') - float('Inf')=== > nan – ntg 2014-09-02 16:04:56

47

是的,你可以使用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 
+17

關於python> = 2.6,你可以使用'math.isnan()'和'math.isinf()' – Agos 2011-05-09 10:21:51

1

當使用Python 2.4,嘗試

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

我面臨的問題,當我端起了simplejson到運行的Python 2.4的嵌入式設備,float("9e999")固定它。請勿使用inf = 9e999,您需要將其從字符串轉換。 -inf給出-Infinity

2

是否可以在Python中將數組的元素設置爲NaN?

是的,你總是可以包括在Python list(以及類似的)一個NaNinf。但是,如果要將其包含在array(例如array.arraynumpy.array)中,則陣列的類型必須爲floatcomplex

>>> 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 -module包含constants for nan and inf (since 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 

而且,可以檢查一個數是否爲infnan功能:math.isfinite(對於Python 3.2+)

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