Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 로그 함수 완벽 정리: math 모듈로 배우는 log, log2, log10, log1p

이 튜토리얼에서는 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) 메서드는 밑이 elog(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)도 입력으로 받을 수 있으므로, 이 글의 예제들을 실수 값으로 바꿔 직접 실행해 보면서 감을 익혀 보시기 바랍니다.