파이썬에는 숫자의 절대 값을 찾는 두 가지 유사한 방법이 있음을 알았습니다.
먼저
abs(-5)
둘째
import math
math.fabs(-5)
이 방법은 어떻게 다릅니 까?
파이썬에는 숫자의 절대 값을 찾는 두 가지 유사한 방법이 있음을 알았습니다.
먼저
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/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정수 및 부동 소수점 이상으로 작동하며 결과 유형이 항상 인수와 동일 하지는 않습니다abs(3+4j).