2014-04-09 7 views
51
In [25]: np.power(10,-100) 
Out[25]: 0 

In [26]: math.pow(10,-100) 
Out[26]: 1e-100 

मैं दोनों आदेशों को 1e-100 वापस करने की अपेक्षा करता हूं। यह एक सटीक मुद्दा नहीं है, क्योंकि यह मुद्दा 500 तक सटीकता बढ़ाने के बाद भी जारी रहता है। क्या कोई सेटिंग है जिसे मैं सही उत्तर पाने के लिए बदल सकता हूं?mth.pow सही उत्तर देता है जबकि numpy.power छोटे एक्सपोनेंट के लिए 0 क्यों देता है?

उत्तर

70

ओह, यह बहुत "बदतर" है कि तुलना में है:

In [2]: numpy.power(10,-1) 
Out[2]: 0 

लेकिन यह क्या हो रहा है के लिए एक संकेत है: 10 एक पूर्णांक है, और numpy.power तैरता के लिए संख्या मजबूर नहीं करता है। लेकिन इस काम करता है:

In [3]: numpy.power(10.,-1) 
Out[3]: 0.10000000000000001 

In [4]: numpy.power(10.,-100) 
Out[4]: 1e-100 

हालांकि, ध्यान दें कि सत्ता ऑपरेटर, **, फ्लोट करने के लिए परिवर्तित करता है: (। बस एक इस पृष्ठ पर दो अन्य उत्तर देने के लिए फुटनोट)

In [5]: 10**-1 
Out[5]: 0.1 
+0

यह ऐसा कुछ है जो निश्चित रूप से numpy मॉड्यूल के साथ एक ऑटो-चेतावनी के साथ आना चाहिए – mjp

35

numpy विधि मानता है कि आप एक पूर्णांक की आपूर्ति के बाद पूर्णांक वापस लौटना चाहते हैं।

np.power(10.0,-100) 

काम करता है जैसा आप उम्मीद करेंगे।

2

को देखते हुए इनपुट दो इनपुट मानों, आप जाँच कर सकते हैं उद्देश्य यह है कि np.powertypes विशेषता निरीक्षण से वापस आ जाएगी की डेटाप्रकार:

>>> np.power.types 
['bb->b', 'BB->B', 'hh->h', 'HH->H', 'ii->i', 'II->I', 'll->l', 'LL->L', 'qq->q', 
'QQ->Q', 'ee->e', 'ff->f', 'dd->d', 'gg->g', 'FF->F', 'DD->D', 'GG->G', 'OO->O'] 

अजगर-संगत पूर्णांक प्रकार l से चिह्नित हैं, संगत संगत अजगर द्वारा d (documents) तैरता है।

np.power प्रभावी ढंग से निर्णय लेता है कि इस सूची से पहले मिलान किए गए हस्ताक्षरों के प्रकारों की जांच करके और वापस लौटने के लिए क्या करना है।

तो 10 और -100, np.power दिए गए integer integer -> integer हस्ताक्षर से मेल खाता है और पूर्णांक 0 देता है।

दूसरी ओर, यदि तर्कों में से एक एक फ्लोट है तो the integer argument will also be cast to a float, और float float -> float हस्ताक्षर का उपयोग किया जाता है (और सही फ्लोट मान लौटाया जाता है)।

संबंधित मुद्दे