이 튜토리얼에서는 Python math 모듈이 제공하는 로그(logarithm) 함수를 자세히 알아봅니다. math 모듈은 총 네 가지 형태의 로그 함수를 제공하며, 각각 용도와 특징이 조금씩 다릅니다. 로그는 수학 계산뿐 아니라 데이터 분석, 머신러닝, 알고리즘 설계 등 다양한 분야에서 자주 사용되는 핵심 개념이니, 하나씩 차례대로 살펴보겠습니다.
1. math.log(number, [Base]) — 밑을 직접 지정하는 로그
math.log(number, [Base]) 메서드는 임의의 밑(Base)을 가지는 로그를 계산할 때 사용합니다. 두 번째 인자인 밑 값을 생략하면 기본값으로 자연상수 e(약 2.71828)가 적용됩니다.
참고: 메서드에 음수를 전달하면 ValueError가 발생합니다. 로그 함수는 양수에 대해서만 정의되기 때문입니다.
예제: 밑을 지정한 경우
# math 모듈 임포트 import math # 밑이 7인 로그 계산 print(math.log(15, 7))
실행 결과
위 프로그램을 실행하면 다음과 같은 결과를 얻습니다.
1.3916625094004957
밑 값은 원하는 숫자로 자유롭게 지정할 수 있습니다. 이번에는 밑을 생략하고 호출해 보겠습니다. 이 경우 기본 밑인 e가 사용됩니다.
예제: 밑을 생략한 경우 (자연로그)
# math 모듈 임포트 import math # 자연로그 계산 (기본 밑 e) print(math.log(15))
실행 결과
2.70805020110221
예제: 음수를 전달한 경우
그렇다면 음수를 math.log() 메서드에 전달하면 어떻게 될까요?
# math 모듈 임포트 import math # 음수에 대한 로그 계산 시도 print(math.log(-15))
실행 결과
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-6-b686fcb806c6> in <module>
3
4 # 음수에 대한 로그 계산 시도
----> 5 print(math.log(-15))
ValueError: math domain error
2. math.log2(number) — 밑이 2인 로그
밑이 2인 로그(이진 로그)를 계산하려면 math.log2() 메서드를 사용합니다. 사용 방식은 앞서 본 math.log와 동일합니다.
예제
# math 모듈 임포트 import math # 밑이 2인 로그 계산 print(math.log2(15))
실행 결과
3.9068905956085187
math.log와 마찬가지로, math.log2에도 음수를 전달하면 오류가 발생합니다.
예제: 음수 입력
# math 모듈 임포트 import math # 밑이 2인 로그에 음수 전달 print(math.log2(-15))
실행 결과
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-3-8019b45e571f> in <module>
3
4 # 밑이 2인 로그에 음수 전달
----> 5 print(math.log2(-15))
ValueError: math domain error
3. math.log10(number) — 밑이 10인 로그 (상용로그)
밑이 10인 로그, 즉 상용로그를 구하려면 math.log10 메서드를 사용합니다. 사용법은 math.log2와 같습니다.
예제
# math 모듈 임포트 import math # 밑이 10인 로그 계산 print(math.log10(15))
실행 결과
1.1760912590556813
math.log10에도 음수를 전달해 보면 앞선 메서드들과 동일한 오류가 발생합니다.
예제: 음수 입력
# math 모듈 임포트 import math # 밑이 10인 로그에 음수 전달 print(math.log10(-15))
실행 결과
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-5-52ac56b802ca> in <module>
3
4 # 밑이 10인 로그에 음수 전달
----> 5 print(math.log10(-15))
ValueError: math domain error
4. math.log1p(number) — log(1 + x) 계산
math.log1p(x) 메서드는 밑이 e인 log(1 + x) 값을 계산합니다. 즉, 입력값에 1을 더한 뒤 자연로그를 취하는 방식이므로, math.log1p(15)는 math.log(16)과 같은 결과를 반환합니다.
이 함수는 x가 아주 작은 값일 때 일반적인 log(1 + x) 계산보다 정밀도가 높다는 장점이 있어, 금융·통계 계산에서 특히 유용하게 쓰입니다.
예제
# math 모듈 임포트 import math # log(1 + 15), 즉 math.log(16)과 동일 print(math.log1p(15))
실행 결과
2.772588722239781
마찬가지로 음수를 전달하면 오류가 발생합니다. 단, log1p(x)는 log(1 + x)를 계산하므로 x ≤ -1인 경우(즉, 1 + x가 0 이하가 되는 경우)에 정의역을 벗어나 오류가 발생한다는 점에 유의하세요.
예제: 음수 입력
# math 모듈 임포트 import math # log1p에 음수 전달 print(math.log1p(-15))
실행 결과
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-15-26016884cb23> in <module>
3
4 # log1p에 음수 전달
----> 5 print(math.log1p(-15))
ValueError: math domain error
마무리
지금까지 math 모듈에서 제공하는 네 가지 로그 함수를 살펴보았습니다.
- math.log(x, [base]) : 밑을 자유롭게 지정 (기본값 e)
- math.log2(x) : 밑이 2인 로그
- math.log10(x) : 밑이 10인 로그
- math.log1p(x) : log(1 + x) 계산
네 함수 모두 정의역을 벗어나는 값(예: 음수)을 전달하면 ValueError: math domain error가 발생합니다. 또한 이 메서드들은 정수뿐 아니라 실수(float)도 입력으로 받을 수 있으므로, 이 글의 예제들을 실수 값으로 바꿔 직접 실행해 보면서 감을 익혀 보시기 바랍니다.