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

Python NumPy로 도 단위 각도 배열의 삼각 탄젠트(tan) 구하기

삼각 함수의 탄젠트(tangent)는 요소 단위로 np.sin(x)/np.cos(x)와 수학적으로 동일합니다. 도(degree) 단위로 주어진 각도 배열의 삼각 탄젠트를 구하려면 Python NumPy에서 제공하는 numpy.tan() 메서드를 사용하면 됩니다.

이 메서드는 첫 번째 매개변수 x의 각 요소에 대한 탄젠트 값을 반환합니다. 첫 번째 매개변수 x는 라디안(radian) 단위의 각도를 나타내며, 2π가 360도에 해당합니다. 따라서 도 단위의 각도 배열을 그대로 전달하면 안 되고, 반드시 라디안으로 변환한 후 사용해야 합니다.

numpy.tan()의 주요 매개변수

1. x (필수)

탄젠트를 계산할 각도입니다. 라디안 단위이며, 여기서는 각도들의 배열을 전달합니다.

2. out (선택)

결과가 저장될 ndarray입니다. 지정하는 경우 입력값들이 브로드캐스트될 수 있는 shape이어야 합니다. 지정하지 않거나 None이면 새로 할당된 배열이 반환됩니다. 튜플 형태로 전달할 수도 있으며(키워드 인자로만 가능), 이 경우 길이가 출력 개수와 같아야 합니다.

3. where (선택)

입력 전체에 브로드캐스트되는 조건입니다. 조건이 True인 위치에는 계산된 ufunc 결과가 저장되고, 그 외의 위치에서는 out 배열이 원래 값을 유지합니다. 참고로 기본값 out=None으로 초기화되지 않은 배열이 생성된 경우, 조건이 False인 위치의 값은 초기화되지 않은 상태로 남게 됩니다.

구현 단계

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

tan 0°, tan 30°, tan 45°, tan 60°, tan 90°, tan 180°, tan -180°를 구하기 위한 각도 배열을 생성합니다.

arr = np.array((0., 30., 45., 60., 90., 180., -180.))

배열을 화면에 출력합니다.

print("배열...\n", arr)

배열의 데이터 타입을 확인합니다.

print("\n배열 데이터 타입...\n", arr.dtype)

배열의 차원을 확인합니다.

print("\n배열 차원...\n", arr.ndim)

배열의 요소 개수를 확인합니다.

print("\n배열 요소 개수...\n", arr.size)

도 단위 각도 배열의 삼각 탄젠트를 구하기 위해 numpy.tan() 메서드를 사용합니다. 도를 라디안으로 변환하기 위해 π/180을 곱해줍니다.

print("\n결과...", np.tan(arr * np.pi / 180.))

전체 예제 코드

import numpy as np

# 삼각 탄젠트는 요소 단위로 np.sin(x)/np.cos(x)와 동일합니다.
# 도 단위로 주어진 각도 배열의 삼각 탄젠트를 구하려면
# Python NumPy의 numpy.tan() 메서드를 사용합니다.

print("각도 배열의 삼각 탄젠트...")

# 각도 배열 생성
# tan 0, tan 30, tan 45, tan 60, tan 90, tan 180, tan -180 계산
arr = np.array((0., 30., 45., 60., 90., 180., -180.))

# 배열 출력
print("배열...\n", arr)

# 배열의 데이터 타입 확인
print("\n배열 데이터 타입...\n", arr.dtype)

# 배열의 차원 확인
print("\n배열 차원...\n", arr.ndim)

# 배열의 요소 개수 확인
print("\n요소 개수...\n", arr.size)

# 도 단위 각도 배열의 삼각 탄젠트 계산
# 도를 라디안으로 변환 후 numpy.tan() 적용
print("\n결과...", np.tan(arr * np.pi / 180.))

실행 결과

각도 배열의 삼각 탄젠트...
배열...
[ 0. 30. 45. 60. 90. 180. -180.]

배열 데이터 타입...
float64

배열 차원...
1

요소 개수...
7

결과... [ 0.00000000e+00 5.77350269e-01 1.00000000e+00 1.73205081e+00
1.63312394e+16 -1.22464680e-16 1.22464680e-16]

결과 해석

실행 결과를 보면 tan 0°는 0, tan 30°는 약 0.577(=1/√3), tan 45°는 1, tan 60°는 약 1.732(=√3)로 수학적으로 정확한 값이 출력됩니다.

tan 90°의 값이 1.63312394e+16처럼 매우 큰 숫자로 표시되는데, 이는 부동소수점 연산 특성상 90°가 정확히 π/2로 표현되지 않아 발생하는 것입니다. 실제 수학적으로 tan 90°는 정의되지 않습니다(무한대). 마찬가지로 tan 180°와 tan -180°도 이론상 0이지만, 부동소수점 오차로 인해 -1.22464680e-16과 같은 아주 작은 값이 출력됩니다. 이러한 오차는 부동소수점 연산에서 자연스러운 현상이므로, 필요에 따라 np.round() 등으로 반올림하여 처리하면 됩니다.