क्या NaN या अनंत के लिए एक संख्या निर्धारित करना संभव है?
हां, वास्तव में कई तरीके हैं। बिना किसी आयात के कुछ काम, जबकि अन्य की आवश्यकता होती हैimport
, हालांकि इस उत्तर के लिए मैं अवलोकन में पुस्तकालयों को मानक-पुस्तकालय और न्यूमपी (जो मानक-पुस्तकालय नहीं है, लेकिन एक बहुत ही सामान्य तृतीय-पक्ष पुस्तकालय है) तक सीमित कर दूंगा।
निम्न तालिका उन तरीकों को संक्षेप में बताती है कि कोई एक नंबर या एक सकारात्मक या नकारात्मक अनंत कैसे बना सकता है float
:
╒══════════╤══════════════╤════════════════════╤════════════════════╕
│ result │ NaN │ Infinity │ -Infinity │
│ module │ │ │ │
╞══════════╪══════════════╪════════════════════╪════════════════════╡
│ built-in │ float("nan") │ float("inf") │ -float("inf") │
│ │ │ float("infinity") │ -float("infinity") │
│ │ │ float("+inf") │ float("-inf") │
│ │ │ float("+infinity") │ float("-infinity") │
├──────────┼──────────────┼────────────────────┼────────────────────┤
│ math │ math.nan │ math.inf │ -math.inf │
├──────────┼──────────────┼────────────────────┼────────────────────┤
│ cmath │ cmath.nan │ cmath.inf │ -cmath.inf │
├──────────┼──────────────┼────────────────────┼────────────────────┤
│ numpy │ numpy.nan │ numpy.PINF │ numpy.NINF │
│ │ numpy.NaN │ numpy.inf │ -numpy.inf │
│ │ numpy.NAN │ numpy.infty │ -numpy.infty │
│ │ │ numpy.Inf │ -numpy.Inf │
│ │ │ numpy.Infinity │ -numpy.Infinity │
╘══════════╧══════════════╧════════════════════╧════════════════════╛
एक मेज के लिए कुछ टिप्पणी:
float
निर्माता, वास्तव में केस-संवेदी है, इसलिए आप भी उपयोग कर सकते हैं float("NaN")
याfloat("InFiNiTy")
।
cmath
और numpy
स्थिरांक सादे पायथन लौट float
वस्तुओं।
numpy.NINF
वास्तव में केवल निरंतर मुझे लगता है कि के बारे में पता की आवश्यकता नहीं है है -
।
यह के साथ जटिल NaN और इन्फिनिटी बनाने के लिए संभव है complex
और cmath
:
╒══════════╤════════════════╤═════════════════╤═════════════════════╤══════════════════════╕
│ result │ NaN+0j │ 0+NaNj │ Inf+0j │ 0+Infj │
│ module │ │ │ │ │
╞══════════╪════════════════╪═════════════════╪═════════════════════╪══════════════════════╡
│ built-in │ complex("nan") │ complex("nanj") │ complex("inf") │ complex("infj") │
│ │ │ │ complex("infinity") │ complex("infinityj") │
├──────────┼────────────────┼─────────────────┼─────────────────────┼──────────────────────┤
│ cmath │ cmath.nan ¹ │ cmath.nanj │ cmath.inf ¹ │ cmath.infj │
╘══════════╧════════════════╧═════════════════╧═════════════════════╧══════════════════════╛
The के साथ विकल्प एक सादा लौटते हैं float
, ए नहीं complex
।
क्या यह जांचने के लिए कोई फ़ंक्शन है कि कोई संख्या अनंत है या नहीं?
हाँ वहाँ है - वास्तव में NaN, Infinity और न तो Nan और न ही Inf के लिए कई कार्य हैं। हालांकि ये पूर्वनिर्धारित कार्य अंतर्निहित नहीं हैं, उन्हें हमेशा एक की आवश्यकता होती है import
:
╒══════════╤═════════════╤════════════════╤════════════════════╕
│ for │ NaN │ Infinity or │ not NaN and │
│ │ │ -Infinity │ not Infinity and │
│ module │ │ │ not -Infinity │
╞══════════╪═════════════╪════════════════╪════════════════════╡
│ math │ math.isnan │ math.isinf │ math.isfinite │
├──────────┼─────────────┼────────────────┼────────────────────┤
│ cmath │ cmath.isnan │ cmath.isinf │ cmath.isfinite │
├──────────┼─────────────┼────────────────┼────────────────────┤
│ numpy │ numpy.isnan │ numpy.isinf │ numpy.isfinite │
╘══════════╧═════════════╧════════════════╧════════════════════╛
फिर से कुछ टिप्पणी:
cmath
औरnumpy
कार्य भी, जटिल वस्तुओं के लिए काम करता है, तो वास्तविक या काल्पनिक हिस्सा NaN या इन्फिनिटी है वे जाँच करेगा।
numpy
भी कार्य के लिए काम करते numpy
सरणियों और सब कुछ है कि (सूचियों, टपल, आदि) एक के लिए परिवर्तित किया जा सकता
- ऐसे कार्य भी हैं जो स्पष्ट रूप से पॉम्पी में सकारात्मक और नकारात्मक अनंतता के लिए जाँच करते हैं:
numpy.isposinf
और numpy.isneginf
।
- पंडों के लिए जाँच करने के लिए दो अतिरिक्त कार्य प्रदान करते हैं
NaN
: pandas.isna
और pandas.isnull
(लेकिन NaN ही नहीं, यह भी मेल खाता है None
और NaT
)
भले ही कोई अंतर्निहित कार्य नहीं हैं, फिर भी उन्हें स्वयं बनाना आसान होगा (मैंने यहाँ टाइप जाँच और प्रलेखन की उपेक्षा की):
def isnan(value):
return value != value # NaN is not equal to anything, not even itself
infinity = float("infinity")
def isinf(value):
return abs(value) == infinity
def isfinite(value):
return not (isnan(value) or isinf(value))
इन कार्यों के लिए अपेक्षित परिणामों को संक्षेप में प्रस्तुत करना (इनपुट फ्लोट है)
╒════════════════╤═══════╤════════════╤═════════════╤══════════════════╕
│ input │ NaN │ Infinity │ -Infinity │ something else │
│ function │ │ │ │ │
╞════════════════╪═══════╪════════════╪═════════════╪══════════════════╡
│ isnan │ True │ False │ False │ False │
├────────────────┼───────┼────────────┼─────────────┼──────────────────┤
│ isinf │ False │ True │ True │ False │
├────────────────┼───────┼────────────┼─────────────┼──────────────────┤
│ isfinite │ False │ False │ False │ True │
╘════════════════╧═══════╧════════════╧═════════════╧══════════════════╛
क्या पायथन में NaN के लिए एक सरणी का एक तत्व सेट करना संभव है?
एक सूची में यह कोई समस्या नहीं है, आप हमेशा NaN (या इन्फिनिटी) को वहां शामिल कर सकते हैं:
>>> [math.nan, math.inf, -math.inf, 1] # python list
[nan, inf, -inf, 1]
लेकिन यदि आप एक में शामिल करना चाहते हैं array
(उदाहरण के लिए array.array
या numpy.array
) तो सरणी के प्रकार चाहिए हो float
या complex
क्योंकि अन्यथा यह सरणियों प्रकार के लिए यह खिन्न करने की कोशिश करेंगे!
>>> import numpy as np
>>> float_numpy_array = np.array([0., 0., 0.], dtype=float)
>>> float_numpy_array[0] = float("nan")
>>> float_numpy_array
array([nan, 0., 0.])
>>> import array
>>> float_array = array.array('d', [0, 0, 0])
>>> float_array[0] = float("nan")
>>> float_array
array('d', [nan, 0.0, 0.0])
>>> integer_numpy_array = np.array([0, 0, 0], dtype=int)
>>> integer_numpy_array[0] = float("nan")
ValueError: cannot convert float NaN to integer