파이썬의 numpy.arctan2()

| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |

구문

numpy.arctan2(x1, x2, /, out=None, *, where=True, 캐스팅=`same_kind`, order=`K`, dtype =없음, subok=True[, signature, extobj]) = ufunc `arctan2`

매개변수
x1 array_like, 실수

y-좌표.

x2 array_like, 실수값

x-좌표. x1.shape인 경우 != x2. 모양 , 공통 모양(출력 모양이 됨)으로 브로드캐스트할 수 있어야 합니다.

out ndarray, None 또는 ndarray와 None의 튜플, 선택 사항

결과가 저장되는 위치입니다. 제공된 경우 입력이 브로드캐스트하는 모양이 있어야 합니다. 제공되지 않거나 None이면 새로 할당된 배열이 반환됩니다. 튜플(키워드 인수로만 가능)은 출력 수와 길이가 같아야 합니다.

여기서 array_like, 선택 사항

이 조건은 입력을 통해 브로드캐스트됩니다. 조건이 True인 위치에서 out 배열은 ufunc 결과로 설정됩니다. 다른 곳에서는 out 배열이 원래 값을 유지합니다. 초기화되지 않은 out 배열이 기본 out=None<을 통해 생성되는 경우 /span>, 조건이 False인 위치는 초기화되지 않은 상태로 유지됩니다.

**kwargs

다른 키워드 전용 인수는 ufunc 문서를 참조하세요. .

반환
각도 ndarray

[-pi, pi]. x1x2가 모두 스칼라인 경우 이는 스칼라입니다.


NumPy arctan2를 다룰 것입니다. 이와 함께 일반적인 이해를 돕기 위해 구문과 매개변수도 살펴보겠습니다. 그런 다음 몇 가지 예를 통해 전체 이론적 부분의 적용을 볼 것입니다. 하지만 먼저 정의를 통해 함수를 분석해 보겠습니다. 첫째, arctan은 tan 함수의 역함수를 의미합니다. 이제 NumPy arctan2 함수는 X1과 X2 사이의 아크 탄젠트 값을 라디안 단위로 계산하는 데 도움이 됩니다. 여기서 X1과 2는 나중에 논의할 매개변수입니다. 이 기사를 진행하면서 상황이 더 명확해질 것입니다. 다음으로 관련 구문을 살펴보겠습니다.
numpy.arctan2() 메서드는 arr1 / 의 요소별 아크탄젠트를 계산합니다. arr2 및 사분면을 올바르게 선택합니다. 사분면은 arctan2(x1, x2)가 원점에서 끝나는 광선과 (1, 0) 점을 통과하는 광선 사이의 부호 있는 각도(라디안)가 되도록 선택되고 광선이 원점에서 끝나고 (x2, x1) 지점을 통과합니다.
Arctan2는 4사분면 역함수입니다. 이를 고려하여 0에서 2pi 사이의 값을 제공합니다. 이 기능의 범위는 -180 ~ 180도입니다. 이것은 Arctan2를 arctan 기능과 구별하는 2가지 핵심 사항입니다.

Arctan과 Arctan2의 차이점

이 섹션에서는 2개의 Numpy 함수의 차이점에 대해 설명합니다.

< td>arctan은 2사분면 역함수입니다.
넘파이 아크탄< /td>넘파이 arctan2
arctan2는 4사분면 역함수입니다.
arctan 함수의 범위는 -90에서 ~ 90도.arctan2의 범위는 -180 ~ 180도입니다.
이 함수는 단일 배열을 허용합니다.이것은 논의된 함수는 2개의 입력 배열을 사용합니다.
이제 NumPy arctan2에 대한 이론적인 부분을 마쳤습니다. 이 섹션에서는 이 기능의 작동 방식과 원하는 출력을 얻는 데 어떻게 도움이 되는지 살펴봅니다. 기본 예제부터 시작하여 점차 더 복잡한 예제로 넘어갈 것입니다.

NumPy Arctan2 예제

numpy를 ppool로 가져오기 y=[1,1] x=[1,1.732] print(ppool.arctan2(y,x)) [0.78539816 0.52361148] 
위에서 우리는 arctan2 함수의 간단한 예를 봅니다. 이제 한 줄씩 걸어보고 결과를 얻은 방법을 이해해 보겠습니다. 먼저 NumPy 함수를 가져왔습니다. 그런 다음 어레이의 2개 세트를 정의했습니다. 함수 구문과 print 문을 사용하여 원하는 결과를 얻습니다. 여기서 두 값 모두 라디안으로 표시됩니다. 이제 어느 정도 결과를 확인하고 싶다면. 이렇게 하려면 다음과 같은 특정 방법을 사용해야 합니다.
도 단위 각도 = 라디안 단위 각도 * 180/pi

결과를 계산하면 45와 30이 나옵니다. - 학위 답변. 여기에서 우리는 파이를 3.14로 간주했습니다. 응답이 일치하므로 결과가 확인됩니다.

Numpy Arctan() 예제 #2

이제 우리가 각도 값도 얻으려고 한다고 가정합니다. 이것은 간단한 프로세스이며 위에서 설명한 for 루프와 공식을 사용하여 수행할 수 있습니다. 방법을 봅시다:
numpy를 ppool degree=0으로 가져오기 y=[-1,1.732] x=[2,1] b=ppool.arctan2(y,x) print(b) for vals in b: degree= vals*(180/3.14) print(도) 

출력:

[-0.46364761 1.04718485] -26.578525356734104 60.0297047211741 값을 어떻게 얻습니까? 및 학위. 모든 단계는 첫 번째 예와 유사합니다. "for 루프"를 사용한 유일한 차이점입니다. 더 간단한 것을 원하면 다른 방법을 사용할 수도 있습니다. 
import numpy as ppool y=[-1,1.732] x=[2,1] b=ppool.arctan2(y,x)*(180/3.14) print (b) 
여기에서 값 (180 / 3.14) 또는 (180 / ppool.pi)에 배열을 곱하기만 하면 됩니다. for 루프 메서드에서 이 메서드를 확실히 사용할 수 있습니다. 그러나 어느 쪽이든 원하는 출력인 정도 값을 얻을 수 있습니다.

출력:

[-26.57852536 60.02970472] 

NumPy Arctan2 예제 #3

def doa(self, receiver, source): ``` 계산 도착 방향 wrt 소스 및 수신기 ``` s_ind = self.key2ind(source) r_ind = self.key2ind(receiver) # 수신기에서 소스로의 벡터 v = self.X[:,s_ind] - self.X[: ,r_ind] 방위각 = np.arctan2(v[1], v[0]) 고도 = np.arctan2(v[2], la.norm(v[ :2])) azimuth = azimuth + 2*np.pi if azimuth < 0. else azimuth 고도 = 고도 + 2*np.pi 만약 고도 < 0. else 고도 return np.array([방위각, 고도]) 

NumPy Arctan2 예제 #4

def mtx_freq2visi(M, p_mic_x, p_mic_y): """ 푸리에 계열을 가시성:param M에 매핑하는 행렬을 만듭니다. M: 푸리에 계열 확장은 다음과 같습니다. -M에서 M으로 제한:param p_mic_x: 마이크를 포함하는 벡터 x 좌표:param p_mic_y: 마이크를 포함하는 벡터 y 좌표:반환: """ num_mic = p_mic_x.size ms = np.reshape(np.arange(- 중 , M + 1, 단계=1), (1, -1), order=`F`) G = np.zeros((num_mic * (num_mic - 1), 2 * M + 1), dtype=complex, order =`C`) count_G = 0 for q in range(num_mic): p_x_outer = p_mic_x[q] p_y_outer = p_mic_y[q] for qp in range(num_mic): if not q == qp: p_x_qqp = p_x_outer - p_mic_x[qp ] p_y_qqp = p_y_outer - p_mic_y[qp] norm_p_qqp = np. sqrt(p_x_qqp ** 2 + p_y_qqp ** 2) phi_qqp = np.arctan2(p_y_qcountqp, p_x]_ -1j) ** ms * sp.special.jv(ms, norm_p_qqp) * np.exp(1j * ms * phi_qqp) count_G += 1 return G 

NumPy Arctan2 예제 #5

def vector_angle(u, v, direction=None): ``` vector_angle(u, v)는 두 벡터 u와 v 사이의 각도를 산출합니다. 선택적 인수 방향은 기본적으로 None이며, 가능한 가장 작은 값을 지정합니다. 벡터 사이의 각도가 보고됩니다. 벡터 u 및 v가 2D 벡터이고 방향 매개변수 True 및 False인 경우 각각 시계 방향 또는 반시계 방향을 지정합니다. 벡터가 3D 벡터인 경우 방향은 u, v 및 원점을 포함하는 평면에 없는 3D 점일 수 있으며 u에서 v까지의 반시계 방향 각도(uxv 또는 vxu)를 지정합니다. 보고해야 합니다(방향 인수와 함께 양의 내적을 갖는 외적 벡터가 회전 축으로 사용됨). ``` 방향이 None인 경우: return np.arccos(vector_angle_cos(u, v)) elif 방향이 True: return np.arctan2(v[1], v[0]) - np. arctan2(u[1], u[0]) elif 방향이 False인 경우: return np.arctan2(u[1], u[0]) - np.arctan2(v[1], v [0]) else: axis1 = normalize(u) axis2 = normalize(np.cross(u, v)) if np.dot(axis2, direction) < 0: axis2 = -axis2 return np.arctan2(np.dot(axis2, v), np.dot(axis1, v)) 

NumPy Arctan2 예제 #6

def __init__(self, line): 데이터 = line.split(` `) data[1:] = [float(x) for x in data[1:]] self.classname = data[0] self.xmin = data[1] self.ymin = data[2 ] self.xmax = data[1]+data[3] self.ymax = data[2]+data[4] self.box2d = np.array([self.xmin,self.ymin,self.xmax,self. ymax]) self.centroid = np.array([데이터[5],데이터[6],데이터[7]]) self.unused_dimension = np.array([데이터[8],데이터[9],데이터[10]) ]]) self.w = 데이터[8] self.l = 데이터[9] self.h = 데이터[10] self.orientation = np.zeros((3,)) self.orientation[0] = 데이터[11 ] 자기 방향[1] = data[12] self.heading_angle = -1 * np.arctan2(self.orientation[1], self.orientation[0]) 

np.arctan2 예제 #7

def stanleyControl(state, cx, cy, cyaw, last_target_idx): """:param state: (상태 객체):param cx: ([float]):param cy: ([float]): param cyaw: ([float]):param last_target_idx: (int):return: (float, int, float) """ # 크로스 트랙 오류 current_target_idx, error_front_axle = calcTargetIndex(state, cx, cy) if last_target_idx >= current_target_idx: current_target_idx = last_target_idx # theta_e는 표제 오류를 수정합니다. theta_e = normalizeAngle(cyaw[current_target_idx] - state.yaw) # theta_d는 교차 트랙 오류를 수정합니다. theta_d = np.arctan2(K_STANLEY_CONTROL * error_front_axle, state. # 스티어링 컨트롤 delta = theta_e + theta_d return delta, current_target_idx, error_front_axle 

np arctan2 예제 #8

def calcTargetIndex(state, cx, cy): """:param state: (상태 객체):param cx: [float]:param cy: [float]:return: (int, float) """ # 앞 차축 위치 계산 fx = state.x + CAR_LENGTH * np.cos(state.yaw) fy = state.y + CAR_LENGTH * np.sin(state.yaw) # 가장 가까운 포인트 인덱스 검색 dx = [fx - icx in cx] dy = [fy - icy in cy] d = [np. sqrt(idx ** 2 + idy ** 2) for (idx, idy) in zip(dx, dy)] error_front_axle = min(d) target_idx = d.index(error_front_axle) target_yaw = normalizeAngle(np.arctan2(fy - cy[target_idx], fx - cx[target_idx]) - state.yaw ) if target_yaw > 0.0: error_front_axle = - error_front_axle return target_idx, error_front_axle 

NumPy Arctan2 예제 #9

def vehicle_flat_reverse(zflag, params={}): # 매개변수 값 가져오기 b = params.get(`wheelbase`, 3.) # 상태와 입력을 저장할 벡터 생성 x = np.zeros(3) u = np.zeros(2) # 평면 변수가 주어지면 상태 x[ 0] = zflag[0][0] # x 위치 x[1] = zflag[1][0] # y 위치 x[2] = np.arctan2(zflag[1][1 ], zflag[0][1]) # tan(theta) = ydot/xdot # 다음 풀이 입력 u[0] = zflag[0][1] * np.cos(x[2]) + zflag[1][1] * np.sin(x[2]) thdot_v = zflag[1][2 ] * np.cos(x[2]) - zflag[0][2] * np.sin(x[2]) u[1] = np.arctan2(thdot_v, u[0 ]**2 / b) return x, u # 시스템 역학의 RHS를 계산하는 함수 

np.arctan2 예제 #10

def GetNeighborCells(self, p, nr, dp = None): ``` 지정된 셀에서 임의의 방향으로 주어진 거리 이하의 모든 셀을 반환합니다. p: 이웃을 가져올 셀 nr: 이웃 반경 dp: 방향 기본 설정 ``` pi, pj, pk = p tqm = self.qm * self.qp nc = [(pi - i * tqm, pj - j * tqm, pk) for i in range(-nr, nr + 1) for j in range(-nr, nr + 1)] dp가 None이 아닌 경우: #방향 기본 설정에 따라 점 정렬 dpa = np.arctan2(dp[1], dp[0]) # 선호하는 방향 각도 가져오기 #방향 선호 dp의 방향; 마지막 방향에서 각도의 크기를 기반으로 정렬 nc = sorted(nc, key = lambda t: np.abs(np.arctan2(t[1], t[0]) - dpa)) return nc #플레이어의 현재 3D 위치를 가져옵니다. 
이 기사에서는 NumPy의 arctan2를 다룹니다. 또한 구문과 매개변수도 보았습니다. 더 나은 이해를 위해 몇 가지 예를 보았습니다. 결국 NumPy arctan2는 이 함수가 2점 사이의 역 tan 값을 찾는 데 도움이 되는 함수라는 결론을 내릴 수 있습니다. 기본적으로 값을 라디안 단위로 반환하지만 위에서 설명한 방법을 사용하여 각도로 변환할 수 있습니다. 이 기사를 통해 모든 의심이 해결되었기를 바랍니다. 그러나 해결되지 않은 질문이 있는 경우 의견 섹션에 자유롭게 적어 주십시오. 그것을 읽었다면 다음 단위 행렬에 대해 읽어보십시오.

Python atan 또는 atan2, 무엇을 사용해야 하나요?

StackOverflow 질문

내 공식 f=arctan(ImZ/ReZ)

두 가지 옵션이 있습니다 :

옵션 1(atan):

ImZ=-4.593172163003 ImR=-4.297336384845 >>> z=y/x >>> f1=math.atan(z) >>> f1 0.8186613519278327 

옵션 2(atan2)

>>> f=math.atan2(y,x) >>> f -2.3229313016619604 

두 결과가 다른 이유는 무엇입니까?

답변:

Atan은 단일 인수를 취하고 Atan2는 두 인수를 취합니다. 하나 대신 두 개의 인수를 사용하는 목적은 계산된 각도의 적절한 사분면을 반환하기 위해 입력의 부호에 대한 정보를 수집하는 것입니다. 이는 불가능합니다. 단일 인수 Atan의 경우

atan2 results for each x,y

Atan2 결과는 항상 -pi와 pi 사이입니다.

참조: https://en.wikipedia.org/wiki/Atan2

보관된 버전

numpy.arctan2(arr1, arr2, 캐스팅 = & # 39; 같은 종류 ;, 주문 = ; K & # 39 ;, dtype = 없음, ufunc & # 39; arctan & # 39;):
올바른 사분면을 선택하여 arr1 / arr2의 요소별 아크탄젠트를 계산합니다. ¬†사분면은 arctan2 (x1, x2)는 원점에서 끝나는 광선과 점 (1, 0)을 통과하는 광선 사이의 각도 기호 (라디안)입니다. 원점에서 끝나고 점 (x2) x1)을 통과하는 광선.

매개변수:

arr1: [array_like] 실제 값, ¬† y 좌표
arr2: [array_like] 실제 값, ¬†x 좌표.¬†y 좌표의 모양과 일치해야 합니다.
출력: [ndarray, array_like [ 선택사항 ]] x 와 모양이 같은 배열.
여기서 [array_like, optional] True 값은 해당 위치에서 범용 함수(ufunc)를 계산하는 것을 의미하고, False 값은 출력에 값을 남겨두는 것을 의미합니다. 홀로.

참고:
2pi 라디안 = 360도
관례는 실수부가 [-pi / 2 , pi /에 있는 각도 z를 반환하는 것입니다. 2].

반환값: arr1 / arr2의 요소별 아크 탄젠트. ¬†폐쇄 간격 [-pi / 2, pi / 2]에 값 ‚Äã‚Äã이 있습니다.

코드 # 1: 작업

# Python3 프로그램 설명
# arctan2 () 함수

 

가져오기 numpy as np

 

arr1 <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> [ <코드 클래스 = "키워드"> - <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "키워드"> + <코드 클래스 = "값"> 1 < 코드 클래스 = "일반">, <코드 클래스 = "키워드"> + <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "키워드"> - <코드 클래스 = "값"> 1 <코드 클래스 = "일반">]

<코드 클래스 = "일반"> arr2 = <코드 클래스 = "일반"> [ <코드 클래스 = "키워드"> - <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "키워드"> - <코드 클래스 = "값"> 1 <코드 클래스 = "일반">, <코드 클래스 = "키워드"> + <코드 클래스 = "값"> 1 <코드 클래스 = "일반" >, <코드 클래스 = "키워드"> + <코드 클래스 = "값"> 1 <코드 클래스 = "일반">]

  

= <코드 클래스 = "일반"> np.arctan2 (arr2, arr1) <코드 클래스 = "키워드"> * <코드 클래스 = "값"> 180 <코드 클래스 = "키워드"> / <코드 클래스 = "일반"> np.pi

 

인쇄 ( "엑스- 좌표:" , arr1)

인쇄 ( "y 좌표 ¬†ates: " , arr2)

  

인쇄 ( "arctan2 값:" , ans )

출력:

x 좌표: [-1, 1, 1 , -1] y 좌표: [-1, -1, 1, 1] arctan2 값: [-135 .¬†-45.¬†45. 135.] 

코드 # 2: 작업

# Python3 프로그램을 보여주는
# arctan2 () 함수

 

가져오기 numpy as np

 

a <코드 클래스 = "키워드"> = <코드 클래스 = "일반"> np.arctan2 ([ 0. , 0. < /코드> <코드 클래스 = "일반">, np.inf ], [ <코드 클래스 = "키워드"> + <코드 클래스 = "값"> 0. < 코드 클래스 = "일반">, <코드 클래스 = "키워드"> - <코드 클래스 = "값"> 0. <코드 클래스 = "일반">, np. inf])

 

<코드 클래스 = "일반"> b <코드 클래스 = "키워드"> = <코드 클래스 =¬†"일반"> np .arctan2 ([ 1. , <코드 클래스 = "키워드"> - <코드 클래스 = "값"> 1. <코드 클래스 = "일반">], [ <코드 클래스 = "값"> 0. <코드 클래스 = "일반">, <코드 클래스 = "값"> 0. <코드 클래스 = "일반" >])

 

인쇄 ( < 코드 클래스 ="문자열 ">" a: " <코드 클래스 ="일반 ">, a)

  

인쇄 ( "b:" , b )

출력:

a: [0. 3.14159265 0.78539816] b: [1.57079633 -1.57079633] 

링크:
arctan2.html#numpy.arctan2>https://docs.scipy.org/doc/numpy-1.13.0/reference/g enerated / numpy.arctan2.html # numpy.arctan2
,