Python 中的 numpy.arctan2()

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

語法

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

參數
x1 array_like,實值

y-坐標。

x2 array_like, real-valued

x-坐標。如果 x1.shape != x2. shape ,它們必須可以廣播到一個通用的形狀(成為輸出的形狀)。

out ndarray,None,或 ndarray 和 None 的元組,可選

存儲結果的位置。如果提供,它必須具有輸入廣播到的形狀。如果未提供或 None,則返回一個新分配的數組。元組(只能作為關鍵字參數)的長度必須等於輸出的數量。

where array_like,可選

這個條件通過輸入廣播。在條件為 True 的位置,out 數組將被設置為 ufunc 結果。在其他地方, out 數組將保留其原始值。請注意,如果未初始化的 out 數組是通過默認的 out=None,其中條件為 False 的位置將保持未初始化狀態。

**kwargs

對於其他僅關鍵字參數,請參閱 ufunc 文檔 .

返回
angle ndarray

角度數組,以弧度表示,範圍為 [-pi, pi]。如果 x1x2 都是標量,則這是一個標量。

dd>

我們將介紹 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象限反函數。
NumPy arctan< /td>NumPy arctan2
arctan2是4象限反函數。
arctan函數的範圍是-90到90 度。arctan2 的範圍是 -180 到 180 度。
此函數接受單個數組。此所討論的函數需要 2 個輸入數組。
現在我們完成了 NumPy arctan2 的理論部分。本節探討此功能的工作原理以及它如何幫助我們獲得所需的輸出。我們將從一個基本示例開始,然後逐漸轉向一個更複雜的示例。

NumPy Arctan2 示例

import numpy as 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度答案。在這裡,我們認為 pi 為 3.14。響應匹配,因此結果得到驗證。

Numpy Arctan() 示例 #2

現在假設我們還想獲得度數的值。這是一個簡單的過程,可以在 for 循環和上面討論的公式的幫助下完成。讓我們看看如何:
import numpy as 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(degree) 

輸出:

[-0.46364761 1.04718485] -26.578525356734104 60.02970472117416 
看看我們如何得到弧度值和學位。所有步驟都與第一個示例類似。我們使用“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 Example #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 elevation = elevation + 2*np.pi if elevation < 0. else elevation return np.array([azimuth, elevation]) 

NumPy Arctan2 Example #4

def mtx_freq2visi(M, p_mic_x, p_mic_y): """ 構建將傅里葉級數映射到可見性的矩陣:參數 M:傅里葉級數展開為從 -M 限製到 M:param p_mic_x:包含麥克風 x 坐標的向量:param p_mic_y:包含麥克風 y 坐標的向量:return:""" num_mic = p_mic_x.size ms = np.reshape(np.arange(-米, M + 1, step=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): 如果不是 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_qqp, p_x_qqp) G[count_G,:] = ( -1j) ** ms * sp.special.jv(ms, norm_p_qqp)  np.exp(1j * ms * phi_qqp) count_G += 1 return G 

NumPy Arctan2 Example #5

def vector_angle(u, v, direction=None): ``` vector_angle(u, v) 產生兩個向量 u 和 v 之間的角度。可選參數方向默認為 None,它指定最小的可能報告向量之間的角度;如果向量 u 和 v 是二維向量,方向參數 True 和 False 分別指定順時針或逆時針方向;如果向量是 3D 向量,則方向可能是不在包含 u、v 和原點的平面中的 3D 點,它指定從 u 到 v 的逆時針角度圍繞哪個方向(uxv 或 vxu)應該報告(與方向參數具有正點積的叉積向量用作旋轉軸)。 ``` 如果方向為無:返回 np.arccos(vector_angle_cos(u, v)) elif 方向為真:返回 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 Example #6

def __init__(self, line): data = 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([data[5],data[6],data[7]]) self.unused_dimension = np.array([data[8],data[9],data[10] ]]) self.w = data[8] self.l = data[9] self.h = data[10] self.orientation = np.zeros((3,)) self.orientation[0] = data[11 ] self.orientation[1] = data[12] self.heading_angle = -1 * np.arctan2(self.orientation[1], self.orientation[0]) 

np.arctan2 Example #7

def stanleyControl(state, cx, cy, cyaw, last_target_idx): """:param state: (State object):param cx: ([float]):param cy: ([float]):參數 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.v) # 轉向控制 delta = theta_e + theta_d return delta, current_target_idx, error_front_axle 

np arctan2 Example #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 for icx in cx] dy = [fy - icy for 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 Example #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 Example #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)] if dp is not None: #Sort points based on direction preference dpa = np.arctan2(dp[1], dp[0]) #Get angle of direction prefered #Prefer direction in dp的方向;根據從最後一個方向的角度大小排序 nc = sorted(nc, key = lambda t: np.abs(np.arctan2(t[1], t[0]) - dpa)) return nc #獲取玩家當前的3d位置
在本文中,我們介紹了NumPy的arctan2。此外,我們還看到了它的語法和參數。為了更好地理解,我們看到了一些例子。最後,我們可以得出結論,NumPy arctan2 是一個函數,該函數幫助我們找到 2 個點之間的反切值。默認情況下,它以弧度返回值,但我們可以使用上面討論的方法將其轉換為度數。我們希望這篇文章已經澄清了你所有的疑惑。但是,如果您有任何未解決的問題,請隨時在評論部分寫下來。讀完之後,為什麼不讀一下下面的單位矩陣。

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 

為什麼這兩個結果不同?

答案:

h3>

Atan 採用單個參數,Atan2 採用兩個參數。使用兩個參數而不是一個參數的目的是收集有關輸入符號的信息,以便返回計算角度的適當象限,這是不可能的對於單參數 Atan

atan2 results for each x,y

Atan2 結果總是介於 -pi 和 pi 之間。

參考:https://en.wikipedia.org/wiki/Atan2

存檔版本

numpy.arctan2 (arr1, arr2, 鑄造 = & # 39; same_kind & # 39 ;, order = & # 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 坐標的形狀。
out: [ndarray, array_like [ OPTIONAL ]] 與 x 形狀相同的數組。
where: [array_like, optional] True值表示計算該位置的通用函數(ufunc),False值表示將值留在輸出中獨自的。

注意:
2pi 弧度 = 360 度
約定返回角度 z,其實部在 [-pi / 2 , pi / 2]。

返回: arr1 / arr2 的逐元素反正切。¬†值 ,Äã,Äã 在閉區間 [-pi / 2, pi / 2] 內。

代碼#1:工作

# Python3程序解釋
# arctan2 () 函數

 

import numpy as np

 

arr1 = [ - 1 , + 1 , + 1 , - 1 ]

arr2 = [ - 1 , - 1 , + 1 , + 1 ]

  

ans = np.arctan2 (arr2, arr1) * 180 / np.pi

 

print ( “X-坐標:" , arr1)

print ( "y 坐標:" , arr2)

  

print ( "arctan2 值:" , ans )

輸出:

x 坐標:[-1, 1, 1 , -1] y 坐標:[-1, -1, 1, 1] arctan2 值:[-135 .¬†-45.¬†45。 135.] 

代碼#2:工作

# Python3程序顯示
# arctan2 () 函數

 

import numpy as np

 

a = np.arctan2 ([ 0. , 0. , np.inf ], [ + 0. , - 0. , np. inf])

 

b = np .arctan2 ([ 1. , - 1. ], [ 0. , 0. ])

 

print ( " a: " , a)

  

print ( "b:" , b)

輸出:

<前>一個:[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
,

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method