안녕하세요. 지난 포스팅의 넘파이 알고 쓰자 - 문자열 정보 추출을 마지막으로 지금까지 넘파이를 활용한 문자열 함수를 알아봤습니다. 오늘부터는 넘파이에서 제공하는 중요한 수학 함수에 대해서 알아보도록 하겠습니다. 그 시작은 간단한 삼각함수입니다.
1. numpy.sin(x), numpy.cos(x), numpy.tan(x)
먼저 고등학교 때부터 쉽게 접할 수 있는 sine, cosine, tangent 함수입니다. 더 이상 말하면 입아프겠죠? x는 넘파이 배열로 각 원소를 적용하는 함수에 따라서 sine, cosine, tangent로 변환해줍니다. 그림과 함께 보도록 하겠습니다.
x = np.linspace(-5, 5, 100)
sin = np.sin(x)
cos = np.cos(x)
plt.plot(x, sin, label='sine')
plt.plot(x, cos, label='cosine')
plt.legend()
이전에 확인한 주어진 범위(-5~5) 사이에서 원하는 만큼(100개)의 넘파이 배열을 만들어주는 np.linspace 함수를 이용해서 정의역을 구성합니다. x를 각각 np.sin, np.cos 함수에 입력하면 위의 그림과 같이 각각 sine, cosine 데이터를 얻을 수 있습니다. 이는 np.tan 함수도 동일하게 해볼 수 있습니다.
x = np.linspace(-np.pi, np.pi, 100)
tan = np.tan(x)
plt.plot(x, tan, label='tangent')
plt.ylim([-5, 5])
plt.legend()
plt.savefig('./tangent.png', dpi=300)
2. numpy.arcsin(x), numpy.arccos(x), numpy.arctan(x)
다음은 sine, cosine, tangent 함수의 역함수인 arcsin, arccos, arctan 함수들입니다. 이 함수들은 간단하게 설명하면 y = x 그래프를 중심으로 대칭으로 그린것입니다. 바로 그림으로 보도록 하겠습니다.
x = np.linspace(-1, 1, 100)
sin = np.sin(x)
arcsin = np.arcsin(x)
plt.plot(x, sin, label='sine')
plt.plot(x, arcsin, label='arcsin')
plt.plot(x, x, 'r:')
plt.plot([0, 0], [-1, 1], 'k')
plt.plot([-1, 1], [0, 0], 'k')
# plt.ylim([-5, 5])
plt.legend()
plt.savefig('./sine_arcsin.png', dpi=300)
x = np.linspace(-1, 3, 100)
cos = np.cos(x)
arccos = np.arccos(x)
plt.plot(x[np.argmin(np.abs(x)):], cos[np.argmin(np.abs(x)):], label='cosine')
plt.plot(x, arccos, label='arccos')
plt.plot(x, x, 'r:')
plt.plot([0, 0], [-1, 3], 'k')
plt.plot([-1, 3], [0, 0], 'k')
# plt.ylim([-5, 5])
plt.legend()
plt.savefig('./cosine_arccos.png', dpi=300)
x = np.linspace(-np.pi/2, np.pi/2, 100)
tan = np.tan(x)
arctan = np.arctan(x)
plt.plot(x, tan, label='tangent')
plt.plot(x, arctan, label='arctan')
plt.plot(x, x, 'r:')
plt.plot([0, 0], [-np.pi/2, np.pi/2], 'k')
plt.plot([-np.pi/2, np.pi/2], [0, 0], 'k')
plt.ylim([-np.pi/2, np.pi/2])
plt.legend()
plt.savefig('./tangent_arctan.png', dpi=300)
이 역삼각함수에 대한 자세한 성질을 공부하고 싶으신 분들은 대학교 미분적분학 교재에 나와있으니 참고하시면 될 거 같습니다.
3. numpy.hypot(x1, x2)
이 함수는 x1, x2를 각각 밑변과 높이로 하는 직각삼각형의 빗변을 얻는 함수입니다. 따라서 $\sqrt{x1^{2} + x2^{2}}$와 동일한 함수입니다. 예시를 보시면 바로 감이 오실겁니다.
np.hypot(3*np.ones((3, 3)), 4*np.ones((3, 3)))
# array([[5., 5., 5.],
# [5., 5., 5.],
# [5., 5., 5.]])
4. numpy.arctan2(x1, x2)
이 함수는 C 언어에서 정의된 특수값을 기반으로 만들어진 함수입니다. 정의된 특수값은 아래의 표를 참고하시면 됩니다.
x = np.array([-1, +1, +1, -1])
y = np.array([-1, -1, +1, +1])
np.arctan2(y, x)
# array([-2.35619449, -0.78539816, 0.78539816, 2.35619449])
5. numpy.radians(x), numpy.deg2rad(x)
각도는 흔히 저희가 사용하는 각도인 도(degree) 표현과 라디안(radian) 표현으로 나뉩니다. 이 함수는 도 -> 라디안으로 변환하는 함수입니다. 아주 간단합니다. 도에 $\frac{\pi}{180^{\circ}}$을 곱해주면 됩니다.
np.deg2rad(90)
# 1.5707963267948966
np.radians(90)
# 1.5707963267948966
6. numpy.degrees(x), numpy.rad2deg(x)
이번에는 라디안 -> 도로 변환하는 함수로 라디안에 $\frac{180^{\circ}}{\pi}$를 곱해주면 됩니다.
np.rad2deg(np.pi/2)
# 90.0
np.degrees(np.pi/2)
# 90.0
'Programming > Python' 카테고리의 다른 글
넘파이 알고 쓰자 - 덧셈, 곱셈, 뺄셈(Sums, products, differences) (0) | 2020.11.12 |
---|---|
넘파이 알고 쓰자 - 쌍곡선 함수(Hyperbolic functions) (0) | 2020.11.06 |
넘파이 알고 쓰자 - 문자열 정보 추출 (0) | 2020.10.15 |
넘파이 알고 쓰자 - 문자열 비교 (0) | 2020.10.10 |
넘파이 알고 쓰자 - 문자열 연산 2 (0) | 2020.10.04 |