Python/파이썬 기초

파이썬 로그(log) 표현 방법 정리(math.log, np.log)

jimmy_AI 2022. 4. 4. 20:04
반응형

다양한 형태의 파이썬 로그 표현 함수들 사용 예제

파이썬에서 여러 형태의 로그(log)를 나타낼 수 있는 방법에 대하여

math 및 numpy 라이브러리의 다양한 log 메소드의 비교를 기준으로 다루어보겠습니다.

 

기본적으로 math와 넘파이 패키지에서 제공하는 로그 표현 메소드의 종류는

밑이 2인 로그를 나타내는 log2, 밑이 10인 상용로그를 나타내는 log10,

자연로그를 표현할 수 있는 log 그리고 log(1+n) 형태를 의미하는 log1p 함수로 나뉩니다.

 

위 함수들의 사용 예제를 바탕으로 두 라이브러리의 log 메소드의 차이를 비교해보겠습니다.

 

 

math.log 함수 예제

math 라이브러리 내 log 메소드는 밑이 n인 log_n m 형태의 수

log(m, n)처럼 input으로 숫자 2개를 넣는 형태로 표현이 가능하다는 특징이 있습니다.

 

또한, 로그 값을 계산할 수 없는 0 혹은 음수에 로그를 취한 경우 ValueError를 반환합니다.

import math

# 밑이 2인 로그
math.log2(32) # 5.0
math.log2(0.25) # -2.0
math.log2(12) # 3.584962500721156
math.log2(0) # ValueError: math domain error

# 상용로그(밑이 10인 로그)
math.log10(1000) # 3.0
math.log10(0.0001) # -4.0
math.log10(2) # 0.3010299956639812

# 자연로그(밑이 e인 로그)
math.log(math.exp(1)) # 1.0
math.log(0.25) # -1.3862943611198906
math.log(13) # 2.5649493574615367

# log_n m : math.log(m, n)으로 표현
math.log(16, 4) # 2.0
math.log(81, 3) # 4.0
math.log(4, 0.25) # -1.0

# log(1 + n) (자연로그)
math.log1p(0) # log 1 -> 0.0
math.log1p(1) # log 2 -> 0.6931471805599453
math.log1p(-0.3) # log 0.7 -> -0.35667494393873234
반응형

np.log 함수 예제

numpy 패키지 내의 log 메소드에서는 math.log와는 다르게 리스트나 넘파이 배열 내의 값들에

일괄적으로 로그를 취하는 것이 가능하다는 특징이 있습니다.

 

또한, 로그를 취할 수 없는 값에도 에러를 반환하지 않으며,

log(0) = -inf(음의 무한대), log(음수) = nan, log(inf) = inf(양의 무한대)를 대신 반환합니다.

 

다만, 밑이 임의의 숫자(n)인 log_n m 형태의 로그를 표현하기 위해서는 input 숫자 2개를

받지 못하고, log(m) / log(n) 형태로 연산을 진행해주어야만 합니다.

import numpy as np

# 밑이 2인 로그
np.log2(4) # 2.0
np.log2(-1) # nan
np.log(0) # -inf
np.log2([0, 1, 2, 4, 8]) # array([-inf,   0.,   1.,   2.,   3.])

# 상용로그(밑이 10인 로그)
np.log10(10000) # 4.0
np.log10([0, 1, 5, 10, 50]) # array([   -inf, 0.     , 0.69897, 1.     , 1.69897])

# 자연로그(밑이 e인 로그)
np.log(np.exp(3)) # 3.0
np.log([-1, 2.7, 12.5, np.inf]) # array([       nan, 0.99325177, 2.52572864,        inf])

# 밑이 2, e, 10이 아닌 로그
np.log(27) / np.log(3) # 3.0 (log_3 27)
np.log([0, 5, 25, 125, 500]) / np.log(5) # array([  -inf, 1.    , 2.    , 3.    , 3.86135312]) : 밑이 5인 로그

# log(1 + n) (자연로그)
np.log1p(-0.5) # -0.6931471805599453
np.log1p([-2, -1, 0, 1, 2]) # array([       nan,       -inf, 0.        , 0.69314718, 1.09861229])