본문 바로가기

Numpy

Numpy - np.log, np.log1p, np.exp

반응형

로그 기본 개념

 

네이버 블로그 : 과수원 과학과수학

 

밑 조건 :  a > 0
진수 조건 : N > 0
x의 범위는 실수

 

 

위 내용 중에서 자연로그에 대해서 알아보자.

 

 

 

자연로그는 자연상수 e를 밑으로 하는 로그함수(natural logarithm)이며 

 

 

rfriend.tistory.com

 

주로 위 세가지 방법으로 표현하나, 박스 체크된 표현을 많이 사용한다.

 

 

*자연상수 e

: 2.71828182846... 의 값을 가지는 무리수 (오일러의 수)

 

 

 

 

 

 

자연로그10

 

 

자연상수(일부)에 2.032...제곱을 하면 10에 가까운 값이 나오는 것이다.

 

 

 

 

 

 

log1 == ?

 

 

당연히 log1은 0이다.

 

 

 

 

 

log0 == ?

 

 

원칙적으론 진수는 0보다 큰 수이다.

 

 

그렇기 때문에 진수자리에 0이 들어가면 경고 메시지가 뜨며 값은 -무한대가 나온다.

 

 

 

 

 

 

 

 

이러한 실수를 방지하기 위해 값에 1을 더해서 log를 취하는 방법이 있다.

 

 

 

배열 정의

 

 

 

x에 로그를 씌워보자

 

 

이처럼 0에 로그를 씌우면 똑같이 에러가 난다.

 

 

 

해결 방법은 아래와 같다.

 

 

원본에 자연로그를 씌우면 -inf 경고메시지가 뜨지만

 

원본에 1을 더한 값에 로그를 씌우면 결국 log1인 것이니 0부터 값이 잘 나오게 된다.

 

 

 

이렇게 매번 1을 더하기는 귀찮으니

 

Numpy에서는 log1p라는 함수로 이를 한번에 해줄 수 있다.

 

위 결과를 보면 원본+1에 자연로그나, 원본에 log1p나 결과가 같은 것을 볼 수 있다.

 

 

 

 

 

 

 

np.exp

 

 

exp는 지수함수를 나타낸다.

 

이 또한 밑이 자연상수이다.

 

 

이 포스팅에선 지수함수에 대해서 자세히 알아보는 것이 아닌

 

로그로 표현된 값에 np.exp를 씌워 원본 값을 구하는 방법을 알아본다.

 

 

 

 

위에서 만들었던 로그값들을 알기 쉽게 변수명으로 정의해주자

 

 

 

 

 

 

 

np.exp로 원본값 반환

 

 

 

origin에 np.exp를 씌우면 원본이 잘 나왔으나

 

log_plus1이나 log_1p의 경우엔 원본에 1씩 더한 값들이 나왔다.

 

그러므로 np.exp를 실행한 뒤 1을 빼줘야 한다.

 

 

 

 

이로써 np.exp를 해도 문제없이 원본이 리턴되었다.

 

 

 

 

정리

 

log(x) - np.exp(x)
log(x+1) 
log1p(x)
- np.exp(x) - 1
반응형