HOWTO · Python
Python에서 오일러 수 사용하기
Python에서 오일러 수를 다룰 때 math.e, math.exp(), numpy.exp()를 올바르게 사용하는 방법입니다.
이 페이지의 내용
오일러 수의 부동소수점 값이 필요하면 math.e를, e를 하나의 스칼라 지수로 거듭제곱하려면 math.exp(x)를, 배열의 모든 항목에 계산을 적용하려면 numpy.exp(values)를 사용합니다. math 모듈은 Python 표준 라이브러리의 일부이며 NumPy는 배열 작업을 위한 선택적 의존성입니다. 이 선택은 보편적인 속도 순위가 아니라 입력 형태와 목적에 따라 결정됩니다.
보통 e로 쓰는 오일러 수는 자연로그의 밑입니다. Python은 이를 이진 부동소수점 값으로 저장하므로 출력 형식은 표시만 바꿀 뿐 이후 계산에 사용되는 값은 바꾸지 않습니다.
상수가 필요하면 math.e 읽기
math에서 e를 가져오면 상수를 직접 읽을 수 있습니다. 레이블, 수식 또는 밑의 값을 명시적으로 필요로 하는 계산에 유용합니다. 출력은 테스트한 런타임에서의 일반적인 Python float 표현입니다.
from math import e
print(e)
2.718281828459045
서식은 표시 단계에서만 적용하세요. 예를 들어 f"{e:.5f}"는 2.71828을 표시하지만 저장된 float을 더 정밀하게 만들지는 않습니다. 계산할 때는 서식을 적용하지 않은 값을 유지하고, 독자나 파일 또는 UI가 특정 소수 자릿수를 요구할 때만 반올림하세요.
스칼라 지수에는 math.exp() 사용
스칼라 x에 대해 e의 x제곱을 계산하려면 math.exp(x)를 사용합니다. 연산이 명확하게 드러나며 Python 문서에서는 math.e ** x보다 일반적으로 정확하다고 설명합니다. math.expm1(x)는 exp(x) - 1이라는 특정 식을 위한 함수로, x가 0에 매우 가까울 때 유효 정밀도가 손실되는 것을 막습니다.
import math
print(math.exp(3))
print(math.expm1(1e-16))
20.085536923187668
1e-16
첫 번째 줄은 e의 세제곱입니다. 두 번째 줄은 expm1이 만든 작은 결과를 보여 줍니다. math.exp(1e-16)에서 1을 빼면 뺄셈이 끝나기 전에 정보가 반올림되어 사라질 수 있습니다.
math.exp()는 Python float의 범위에 제한됩니다. 충분히 큰 유한 지수는 OverflowError를 발생시키므로 입력에 제한이 없을 수 있다면 모든 지수를 표현할 수 있다고 가정하지 말고 이 경계를 처리해야 합니다.
import math
try:
math.exp(1000)
except OverflowError as error:
print(type(error).__name__)
OverflowError
애플리케이션에서 오버플로가 예상되면 입력 범위를 검증하거나 수학적 표현을 바꾸거나 해당 분야에 맞는 수치 방법을 사용하세요. 예외가 프로그램의 의도된 동작이라면 잡는 것이 유용하지만, 예상하지 못한 입력 오류를 숨겨서는 안 됩니다.
배열 값에는 numpy.exp() 사용
numpy.exp()는 요소별로 동작하는 유니버설 함수입니다. 각 지수에 대응하는 결과가 필요하면 배열과 유사한 컬렉션을 전달하세요. NumPy가 없다면 프로젝트의 일반적인 의존성 도구로 먼저 설치해야 합니다. 표준 라이브러리의 math 모듈은 배열 연산을 제공하지 않습니다.
import numpy as np
exponents = np.array([0.0, 1.0, 2.0])
print(np.exp(exponents))
[1. 2.71828183 7.3890561 ]
반환되는 배열은 입력과 같은 형태이며 각 요소를 지수로 하는 e의 거듭제곱을 담습니다. 하나의 스칼라에는 math.exp()를, 배열 의미가 필요할 때는 numpy.exp()를 사용하세요. NumPy는 스칼라도 받을 수 있지만 하나의 스칼라 계산만을 위해 가져올 필요는 없습니다.
입력에 따라 방법 선택
상수를 읽을 때는 math.e, 하나의 스칼라 지수에는 math.exp(), 배열의 요소별 계산에는 numpy.exp()를 사용하세요. 0 근처에서 필요한 결과가 exp(x) - 1이면 math.expm1()을 사용합니다. 모든 API는 유한 부동소수점 값을 사용하므로 서식은 표시만 바꾸고 매우 큰 지수 결과는 float에 들어가지 않을 수 있습니다. 자세한 내용은 공식 Python math 문서와 NumPy exp 문서를 참조하세요.