मैंने देखा कि अजगर में किसी संख्या का निरपेक्ष मान ज्ञात करने की दो समान विधियाँ हैं:
प्रथम
abs(-5)
दूसरा
import math
math.fabs(-5)
ये तरीके कैसे भिन्न हैं?
मैंने देखा कि अजगर में किसी संख्या का निरपेक्ष मान ज्ञात करने की दो समान विधियाँ हैं:
प्रथम
abs(-5)
दूसरा
import math
math.fabs(-5)
ये तरीके कैसे भिन्न हैं?
जवाबों:
math.fabs()अपने तर्क को फ्लोट में परिवर्तित करता है यदि यह हो सकता है (यदि ऐसा नहीं हो सकता है, तो यह एक अपवाद फेंकता है)। यह तब पूर्ण मान लेता है, और परिणाम को एक फ्लोट के रूप में लौटाता है।
तैरने के अलावा, abs()पूर्णांक और जटिल संख्याओं के साथ भी काम करता है। इसका रिटर्न प्रकार इसके तर्क के प्रकार पर निर्भर करता है।
In [7]: type(abs(-2))
Out[7]: int
In [8]: type(abs(-2.0))
Out[8]: float
In [9]: type(abs(3+4j))
Out[9]: float
In [10]: type(math.fabs(-2))
Out[10]: float
In [11]: type(math.fabs(-2.0))
Out[11]: float
In [12]: type(math.fabs(3+4j))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
/home/npe/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))
TypeError: can't convert complex to float
fabsहमेशा की-फ्लोट प्रकृति के कारण अधिक समय लेने के बारे में एक टिप्पणी जोड़ें और आपको सही उत्तर मिल गया है!
__builtin__.abs()सफलतापूर्वक लागू किया जा सकता है?
__abs__जादू विधि
संपादित करें: जैसा कि @aix ने सुझाव दिया है, गति अंतर की तुलना करने के लिए एक बेहतर (अधिक निष्पक्ष) तरीका:
In [1]: %timeit abs(5)
10000000 loops, best of 3: 86.5 ns per loop
In [2]: from math import fabs
In [3]: %timeit fabs(5)
10000000 loops, best of 3: 115 ns per loop
In [4]: %timeit abs(-5)
10000000 loops, best of 3: 88.3 ns per loop
In [5]: %timeit fabs(-5)
10000000 loops, best of 3: 114 ns per loop
In [6]: %timeit abs(5.0)
10000000 loops, best of 3: 92.5 ns per loop
In [7]: %timeit fabs(5.0)
10000000 loops, best of 3: 93.2 ns per loop
In [8]: %timeit abs(-5.0)
10000000 loops, best of 3: 91.8 ns per loop
In [9]: %timeit fabs(-5.0)
10000000 loops, best of 3: 91 ns per loop
तो ऐसा लगता है कि पूर्णांक के लिए abs()केवल थोड़ा गति लाभ है fabs()। तैरने के लिए, abs()और fabs()समान गति प्रदर्शित करता है।
@Aix ने जो कहा है उसके अलावा, एक और बात पर विचार करना गति का अंतर है:
In [1]: %timeit abs(-5)
10000000 loops, best of 3: 102 ns per loop
In [2]: import math
In [3]: %timeit math.fabs(-5)
10000000 loops, best of 3: 194 ns per loop
तो abs()से तेज है math.fabs()।
from math import fabsसुनिश्चित करने के लिए उपयोग करें, और -5.0दोनों के लिए प्रयास करें ।
abs(): पूर्ण मान को तर्क के अनुसार लौटाता है अर्थात यदि तर्क int है तो वह int को लौटाता है, यदि तर्क फ्लोट है तो यह रिटर्न फ्लोट है। इसके अलावा यह कॉम्प्लेक्स वैरिएबल पर abs(a+bj)भी काम करता है यानी पूर्ण मूल्य पर भी काम करता है और देता हैmath.sqrt(((a)**2)+((b)**2)
math.fabs(): यह केवल पूर्णांक या फ्लोट मान पर काम करता है। हमेशा पूर्ण फ़्लोट मान लौटाता है, चाहे कोई भी तर्क प्रकार हो (जटिल संख्याओं को छोड़कर)।
absकेवल पूर्णांकों और फ़्लोट्स से कहीं अधिक के साथ काम करता है, और परिणाम प्रकार हमेशा तर्क के समान नहीं होता है, जैसेabs(3+4j)।