Python/Numpy

[Numpy] 파이썬 삼각함수(sin, cos, tan)와 역삼각함수(arcsin, arccos, arctan) 메소드 정리

jimmy_AI 2022. 6. 7. 20:32
반응형

Python 넘파이 삼각/역삼각함수 사용법 예제

파이썬의 numpy 모듈에서 sin, cos, tan의 삼각함수를 나타내는 메소드와

arcsin, arccos, arctan의 역삼각함수를 나타내는 메소드에 대하여 다루어보고,

math 라이브러리의 삼각/역삼각함수 메소드와 간단한 비교를 진행해보겠습니다.

 

 

삼각함수 메소드 : np.sin, np.cos, np.tan

넘파이 라이브러리에서는 기본적으로 사인, 코사인 및 탄젠트 함수에 대한 메소드만을 지원하며,

각도 단위가 아닌 라디안 단위로 input을 넣어주셔야 합니다.

 

(삼각함수의 역수인 cosec, sec, cot에 대한 직접적인 메소드는 지원하지 않고

직접 sin, cos, tan에 역수를 취해서 사용해주셔야 합니다.)

 

우선, 각도 숫자 1개에 대한 삼각함수 값을 구한 예시입니다.

import numpy as np

# 30도 각도에 대한 sin, cos, tan 값
np.sin(np.pi / 6) # 0.49999999999999994
np.cos(np.pi / 6) # 0.8660254037844387
np.tan(np.pi / 6) # 0.5773502691896257

30도를 나타낼 경우 30이 아니라 라디안 값인 np.pi/6으로 작성한 점에 유의해주세요.

 

여러 각도가 담긴 리스트(혹은 numpy array)에 대해서도 한 번에 삼각함수 적용이 가능합니다.

# 0, 30, 45, 60, 90도 각도에 대한 sin, cos, tan 값
radians = [0, np.pi/6, np.pi/4, np.pi/3, np.pi/2]

np.sin(radians)
# array([0.        , 0.5       , 0.70710678, 0.8660254 , 1.        ])

np.cos(radians)
# array([1.00000000e+00, 8.66025404e-01, 7.07106781e-01, 5.00000000e-01, 6.12323400e-17])

np.tan(radians)
# array([0.00000000e+00, 5.77350269e-01, 1.00000000e+00, 1.73205081e+00, 1.63312394e+16])

 

참고로, math 라이브러리의 sin, cos, tan 함수도 비슷한 기능을 수행하지만

리스트 형태에 대하여 한 번에 적용은 불가능합니다.

import math

math.sin(math.pi/2) # 1.0
math.sin([0, math.pi/2]) # TypeError: must be real number, not list

 

반응형

 

역삼각함수 메소드 : np.arcsin, np.arccos, np.arctan

사인, 코사인 및 탄젠트에 대한 역함수도 넘파이 모듈에서 지원하고 있습니다.

각각 np.arcsin, np.arccos 및 np.arctan로 사용하시면 되며,

숫자 1개 혹은 숫자들의 리스트(배열)에 대해서 모두 적용이 가능합니다.

np.arcsin(0.5) # 0.5235987755982989 -> pi/6
np.arccos(0.5) # 1.0471975511965979 -> pi/3
np.arctan(1) # 0.7853981633974483 -> pi/4

np.arcsin([0, 0.5, 1]) # array([0.        , 0.52359878, 1.57079633])
np.arccos([0, 0.5, 1]) # array([1.57079633, 1.04719755, 0.        ])
np.arctan([0, 1, np.inf]) # array([0.        , 0.78539816, 1.57079633])

함수의 결과는 도 단위의 각도가 아니라 라디안으로 반환된 점을 참고해주세요.

 

math 모듈에서는 해당 함수들을 asin, acos 및 atan 함수로 지원하고 있습니다.

다만, 이 함수들도 마찬가지로 단일 숫자에 대한 값 반환만 가능합니다.

math.acos(1) # 0.0
math.acos([0, 1]) # TypeError: must be real number, not list