도(degree) 단위로 주어진 각도 배열의 삼각 사인(trigonometric sine) 값을 구하려면 Python NumPy의 numpy.sin() 메서드를 사용하면 됩니다. 이 메서드는 첫 번째 매개변수 x의 각 요소에 대한 사인 값을 반환하며, 입력이 스칼라일 경우 결과 역시 스칼라로 반환됩니다.
여기서 주의할 점은 첫 번째 매개변수 x가 라디안(radian) 단위의 각도라는 것입니다. 즉, 2π가 360도에 해당합니다. 따라서 도 단위의 각도를 다룰 때는 반드시 라디안으로 변환해야 합니다.
두 번째와 세 번째 매개변수는 선택 사항(optional)입니다.
주요 매개변수 살펴보기
out (두 번째 매개변수): 결과가 저장될 ndarray 위치입니다. 지정할 경우 입력값들이 브로드캐스트(broadcast)될 수 있는 형태(shape)여야 하며, 지정하지 않거나 None으로 두면 새로 할당된 배열이 반환됩니다. 튜플 형태로 전달할 수 있으며(키워드 인수로만 가능), 이때 길이는 출력 개수와 같아야 합니다.
where (세 번째 매개변수): 입력 배열 전체에 브로드캐스트되는 조건입니다. 조건이 True인 위치에는 ufunc 연산 결과가 out 배열에 저장되고, 나머지 위치는 원래 값을 그대로 유지합니다. 단, 기본값인 out=None으로 초기화되지 않은 배열을 생성한 경우 조건이 False인 위치는 초기화되지 않은 상태로 남게 되므로 주의해야 합니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
삼각 사인을 구할 각도 배열을 생성합니다. 여기서는 sin 0°, sin 30°, sin 45°, sin 60°, sin 90°, sin 180°를 구해 보겠습니다.
arr = np.array((0., 30., 45., 60., 90., 180.))
생성한 배열을 화면에 출력합니다.
print("Array...\n", arr)배열의 데이터 타입을 확인합니다.
print("\nArray datatype...\n", arr.dtype)배열의 차원(dimension)을 확인합니다.
print("\nArray Dimensions...\n", arr.ndim)배열에 포함된 요소의 개수를 확인합니다.
print("\nNumber of elements in the Array...\n", arr.size)도 단위로 주어진 각도 배열의 사인 값을 구하려면 numpy.sin() 메서드에 각도를 라디안으로 변환하여 전달합니다. 변환 공식은 각도 × π ÷ 180입니다.
print("\nResult...", np.sin(arr * np.pi / 180.))전체 예제 코드
import numpy as np
# 도 단위로 주어진 각도 배열의 삼각 사인을 구하기 위해 numpy.sin() 메서드 사용
# 이 메서드는 첫 번째 매개변수 x의 각 요소에 대한 사인 값을 반환합니다.
print("The Trigonometric sines of an array of angles...")
# 각도 배열 생성
# sin 0, sin 30, sin 45, sin 60, sin 90, sin 180 구하기
arr = np.array((0., 30., 45., 60., 90., 180.))
# 배열 출력
print("Array...\n", arr)
# 배열의 데이터 타입 확인
print("\nOur Array type...\n", arr.dtype)
# 배열의 차원 확인
print("\nOur Array Dimensions...\n", arr.ndim)
# 배열의 요소 개수 확인
print("\nNumber of elements...\n", arr.size)
# 도 단위 각도를 라디안으로 변환한 후 사인 값 계산
print("\nResult...", np.sin(arr * np.pi / 180.))실행 결과
The Trigonometric sines of an array of angles... Array... [ 0. 30. 45. 60. 90. 180.] Our Array type... float64 Our Array Dimensions... 1 Number of elements... 6 Result... [0.00000000e+00 5.00000000e-01 7.07106781e-01 8.66025404e-01 1.00000000e+00 1.22464680e-16]
결과 해석
출력된 결과를 보면 각도별 사인 값이 정확하게 계산된 것을 확인할 수 있습니다.
- sin 0° = 0
- sin 30° = 0.5
- sin 45° ≈ 0.7071 (√2/2)
- sin 60° ≈ 0.8660 (√3/2)
- sin 90° = 1.0
- sin 180° ≈ 1.22e-16 — 이론상 0이지만 부동소수점 연산의 한계로 인해 아주 작은 오차 값이 나타납니다.
마지막 값처럼 부동소수점 연산 특성상 미세한 오차가 발생할 수 있다는 점을 기억해 두면 좋습니다. 만약 더 깔끔한 결과가 필요하다면 np.round()를 사용해 소수점 자릿수를 반올림하는 방법도 있습니다.