code

Python-abs 대 fab

codestyles 2020. 8. 18. 07:43
반응형

Python-abs 대 fab


파이썬에는 숫자의 절대 값을 찾는 두 가지 유사한 방법이 있음을 알았습니다.

먼저

abs(-5)

둘째

import math
math.fabs(-5)

이 방법은 어떻게 다릅니 까?


math.fabs()가능한 경우 인수를 float로 변환합니다 (할 수없는 경우 예외가 발생 함). 그런 다음 절대 값을 취하고 결과를 부동 소수점으로 반환합니다.

부동 소수점 외에도 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/alexei/<ipython-input-12-8368761369da> in <module>()
----> 1 type(math.fabs(3+4j))

TypeError: can't convert complex to float

편집 : @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().


math.fabs() always returns float, while abs() may return integer.


abs() : Returns the absolute value as per the argument i.e. if argument is int then it returns int, if argument is float it returns float. Also it works on complex variable also i.e. abs(a+bj) also works and returns absolute value i.e.math.sqrt(((a)**2)+((b)**2)

math.fabs() : It only works on the integer or float values. Always returns the absolute float value no matter what is the argument type(except for the complex numbers).

참고URL : https://stackoverflow.com/questions/10772302/python-abs-vs-fabs

반응형