নাএন বা অনন্তকে কোনও নম্বর সেট করা সম্ভব?


202

NaNপাইথনে কোন অ্যারের উপাদান সেট করা সম্ভব ?

অতিরিক্তভাবে, + /- অনন্তে কোনও ভেরিয়েবল সেট করা সম্ভব? যদি তাই হয়, কোনও সংখ্যা অনন্ত কিনা তা যাচাই করার জন্য কোনও ফাংশন আছে কি না?


3
stackoverflow.com/questions/944700 আপনাকে কীভাবে NaN চেক করবেন তা আপনাকে জানায়। ইনফ এবং -আইনফের জন্য আপনি == দিয়ে পরীক্ষা করতে পারেন তবে NaN এর জন্য IEEE754 নিয়মের কারণে এটি NaN এর পক্ষে কাজ করে না।
ডেভিড হেফারনান

আমি মনে করি যে সবচেয়ে নির্ভরযোগ্য উপায় মত সঠিক ফাংশন ব্যবহার করা isinfএবং isnanযেমন দ্বারা উপলব্ধ numpy। আমার উত্তর নীচে দেখুন।
অলিভিয়ার ভার্দিয়ার

উত্তর:


271

স্ট্রিং থেকে কাস্ট করুন float():

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

1
এটি আমাকে দ্বিতীয় বার প্রশ্নটি পড়ার আগে একটি চাবুক দিয়ে ঝাঁপিয়ে পড়তে শেখাবে না !! দুঃখিত! এই বলেছে যে, এটি একই রকম বললে ক্ষতি হবে না কারণ এটি একটি সহজ ফাঁদে পড়ে, NaN! = NaN
ডেভিড হেফারনান

2
এছাড়াও দ্রষ্টব্য: >>> ভাসা ('ইনফ') - ভাসা ('ইনফ') ===> নান
এনটিজি

76

হ্যাঁ, আপনি এটির 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

21
অজগর> = 2.6 এ, আপনি কেবল ব্যবহার করতে পারেন math.isnan()এবংmath.isinf()
অ্যাগোস

8
numpyআপনি যা চান তা সবই যদি হয় NaNবাinf
সিজেড

1
আপনার যা যা প্রয়োজন তা হ'ল NaNবা Inf, from numpy import nan, infএই প্রশ্নটি উত্থাপিত হওয়ার পর থেকে যেটি বিদ্যমান থাকতে পারে ।
অ্যান্ড্রুগু

37

নাএন বা অনন্তকে কোনও নম্বর সেট করা সম্ভব?

হ্যাঁ, আসলে বেশ কয়েকটি উপায় রয়েছে। কোনও আমদানি ছাড়াই কয়েকটি কাজ, অন্যদের প্রয়োজন হয়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           
    ╘══════════╧════════════════╧═════════════════╧═════════════════════╧══════════════════════╛

    Not সহ বিকল্পগুলি একটি সমভূমি ফেরত দেয়, একটি floatনয় complex

একটি সংখ্যা অনন্ত কিনা তা যাচাই করার জন্য কোনও ফাংশন আছে কি না?

হ্যাঁ আছে - বাস্তবে নাএন, ইনফিনিটি এবং ন্যান বা ইনফের জন্য বেশ কয়েকটি ফাংশন রয়েছে। তবে এই পূর্বনির্ধারিত ফাংশনগুলি অন্তর্নির্মিত নয়, তাদের সর্বদা একটি প্রয়োজন 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অ্যারে এবং সবকিছু যে (তালিকা, tuple, ইত্যাদি) এক পরিবর্তিত করা যায়
  • এছাড়াও এমন ফাংশন রয়েছে যা NumPy: numpy.isposinfএবং এর মধ্যে ইতিবাচক এবং নেতিবাচক অনন্ততার জন্য স্পষ্টভাবে পরীক্ষা করে numpy.isneginf
  • পান্ডা পরীক্ষা করার জন্য দুটি অতিরিক্ত ফাংশন সরবরাহ করে NaN: pandas.isnaএবং pandas.isnull(তবে কেবল নাএনএন নয়, এটিও মেলে 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

1
দ্রষ্টব্য: math.isnanজটিল সংখ্যা নিয়ে কাজ করে না। math.isnan(x.real) or math.isnan(x.imag)পরিবর্তে ব্যবহার করুন।
জোনাথন এইচ

2

পাইথন ২.৪ ব্যবহার করার সময় চেষ্টা করুন

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

আমি যখন ইমেজড ডিভাইসে সিম্পজসনকে পোর্টিং করছিলাম তখন আমি সমস্যার মুখোমুখি হচ্ছি যা পাইথন ২.৪ চালাচ্ছে, float("9e999")এটি ঠিক করেছে। ব্যবহার করবেন না inf = 9e999, আপনার স্ট্রিং থেকে রূপান্তর করতে হবে। -infদেয় -Infinity

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.