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

Python numpy.arctan2()로 사분면을 올바르게 선택하며 x1/x2의 요소별 아크탄젠트 계산하기

numpy.arctan2() 메서드는 사분면(quadrant)을 올바르게 선택하여, arctan2(x1, x2)가 원점에서 출발해 점 (1,0)을 지나는 광선과 원점에서 출발해 점 (x2, x1)을 지나는 광선 사이의 부호 있는 각도(라디안 단위)를 반환하도록 합니다.

첫 번째 매개변수는 y좌표이고, 두 번째 매개변수는 x좌표입니다. 만약 x1.shape와 x2.shape가 서로 다르다면, 두 배열은 공통 형태로 브로드캐스팅(broadcasting) 가능해야 합니다. 이 메서드는 [-pi, pi] 범위 내의 라디안 값으로 구성된 배열을 반환하며, x1과 x2가 모두 스칼라인 경우에는 스칼라 값을 반환합니다.

단계별 진행 방법

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

import numpy as np

array() 메서드를 사용해 배열을 생성합니다. 아래 네 개의 점은 각각 서로 다른 사분면에 위치한 좌표입니다.

x = np.array([-1, +1, +1, -1])
y = np.array([-1, -1, +1, +1])

첫 번째 배열(x좌표)을 출력합니다.

print("Array1 (x coordinates)...\n", x)

두 번째 배열(y좌표)을 출력합니다.

print("\nArray2 (y coordinates)...\n", y)

사분면을 올바르게 선택하면서 x1/x2의 요소별(element-wise) 아크탄젠트를 계산하려면 Python의 numpy arctan2() 메서드를 사용합니다. 반환값은 라디안 단위이므로, 여기서는 180/np.pi를 곱해 도(degree) 단위로 변환하여 출력했습니다.

print("\nResult...",np.arctan2(y, x) * 180 / np.pi)

전체 예제 코드

import numpy as np

# 사분면은 arctan2(x1, x2)가 원점에서 출발해 점 (1,0)을 지나는 광선과
# 원점에서 출발해 점 (x2, x1)을 지나는 광선 사이의 부호 있는 각도(라디안)가 되도록 선택됩니다.

# array() 메서드로 배열 생성
# 네 개의 점은 서로 다른 사분면에 위치합니다.
x = np.array([-1, +1, +1, -1])
y = np.array([-1, -1, +1, +1])

# 첫 번째 배열 출력
print("Array1 (x coordinates)...\n", x)

# 두 번째 배열 출력
print("\nArray2 (y coordinates)...\n", y)

# 사분면을 올바르게 선택하며 x1/x2의 요소별 아크탄젠트 계산
print("\nResult...",np.arctan2(y, x) * 180 / np.pi)

출력 결과

Array1 (x coordinates)...
[-1 1 1 -1]

Array2 (y coordinates)...
[-1 -1 1 1]

Result... [-135. -45. 45. 135.]

결과를 해석해 보면, 점 (-1, -1)은 제3사분면에 위치하므로 -135°, 점 (+1, -1)은 제4사분면이므로 -45°, 점 (+1, +1)은 제1사분면이므로 45°, 점 (-1, +1)은 제2사분면이므로 135°가 됩니다. 이처럼 arctan2()는 일반 arctan()과 달리 입력 좌표의 부호를 모두 고려해 정확한 사분면의 각도를 자동으로 판별해 줍니다.