2011-03-25 17 views
110

क्या पाइथन में NaN पर किसी सरणी का तत्व सेट करना संभव है?पायथन नैन और इंफ मान

इसके अतिरिक्त, क्या एक चर को +/- अनंतता सेट करना संभव है? यदि हां, तो क्या यह जांचने के लिए कोई फ़ंक्शन है कि कोई संख्या अनंत है या नहीं? स्ट्रिंग से

+3

http://stackoverflow.com/questions/944700/ बताता है आप NaN के लिए कैसे जांचें। इंफ और इन्फ के लिए आप == के साथ परीक्षण कर सकते हैं लेकिन यह NaN के लिए IEEE754 नियमों के कारण NaN के लिए काम नहीं करता है। –

+0

मुझे लगता है कि सबसे विश्वसनीय तरीका 'isinf' और' isnan' जैसे उचित कार्यों का उपयोग करना है जैसा कि 'numpy' द्वारा प्रदान किया गया है। नीचे मेरा जवाब देखें। –

उत्तर

155

कास्ट float() का उपयोग कर:

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

वह मुझे दूसरी बार प्रश्न पढ़ने से पहले एक कूल्हे के साथ कूदने के लिए सिखाएगा !! माफ़ कीजिये! उस ने कहा, यह इतना कहने में कोई दिक्कत नहीं होगी क्योंकि यह एक आसान जाल है, NaN! = NaN –

+1

यह भी ध्यान दें: >>> फ्लोट ('इन्फ') - फ्लोट ('इन्फ') === > नैन – ntg

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

पायथन> = 2.6 पर, आप केवल 'math.isnan() 'और' math.isinf() ' – Agos

1

अजगर 2.4 का उपयोग कर,

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

मैं इस मुद्दे का सामना करना पड़ रहा है जब मैं एक एम्बेडेड उपकरण है जो अजगर 2.4 चलाने के लिए simplejson पोर्टिंग गया था की कोशिश, float("9e999") यह तय की। inf = 9e999 का उपयोग न करें, आपको इसे स्ट्रिंग से कन्वर्ट करने की आवश्यकता है। -inf-Infinity देता है।

2

क्या पाइथन में नाइन के लिए सरणी का तत्व सेट करना संभव है?

हाँ, आप हमेशा एक NaN या inf एक अजगर list (और इसी तरह) में शामिल कर सकते हैं। हालांकि यदि आप इसे array (उदाहरण के लिए array.array या numpy.array) में शामिल करना चाहते हैं तो सरणी का प्रकारfloat या complex होना चाहिए!

math.isnan जांच करता है कि मूल्य nan है:

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

>>> 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 मॉड्यूल इन के लिए जाँच करने के लिए (अजगर 2.6 के बाद से उपलब्ध है) constants for nan and inf (since Python 3.5) साथ ही कुछ कार्यों में शामिल है

math.isinf चेक करता है कि मान अनंत है (सकारात्मक या नकारात्मक):

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

और एक समारोह है कि जाँच कर सकते हैं एक नंबर हैinf या nan नहीं: math.isfinite (अजगर के लिए उपलब्ध 3.2+)

>>> math.isfinite(math.inf) 
False 
>>> math.isfinite(math.nan) 
False 
>>> math.isfinite(11.2) 
True 
संबंधित मुद्दे