構文
numpy.arctan2 (x1、x2、/、out = None、*、 where = True 、キャスト =` same_kind `、注文 =` K `、 dtype =なし、 subok = True [、signature、extobj] )=ufunc`arctan2`
パラメーター
- x1 array_like、real-valued
y -座標。
- x2 array_like、実数値
x-座標。
x1.shape != x2の場合。 shape
の場合、共通の形状(出力の形状になります)にブロードキャスト可能である必要があります。- out ndarray、None、またはndarrayとNoneのタプル、オプション
結果が保存される場所。提供する場合は、入力がブロードキャストする形状である必要があります。指定しない場合またはNoneの場合、新しく割り当てられた配列が返されます。タプル(キーワード引数としてのみ可能)の長さは、出力の数と同じである必要があります。
- ここで、 array_like、オプション
この条件は入力を介してブロードキャストされます。条件がTrueの場所では、 out配列がufunc結果に設定されます。他の場所では、 out配列は元の値を保持します。初期化されていない
out 配列が、デフォルトの out =None<を介して作成されている場合は注意してください。 / span>
、条件がFalseであるその中の場所は、初期化されないままになります。- ** kwargs
その他のキーワードのみの引数については、 ufunc docsを参照してください。 。
戻り値
- angle ndarray
範囲
[-pi、 pi]
。 x1とx2 の両方がスカラーである場合、これはスカラーです。
NumPy arctan2について説明します。それに加えて、より一般的な理解のために、その構文とパラメーターについても見ていきます。次に、いくつかの例を通して、理論的な部分全体の適用を見ていきます。しかし、最初に、その定義を通して関数を分析してみましょう。まず、arctanはtan関数の逆関数を意味します。これで、NumPy arctan2
関数は、X1とX2の間のアークタン値をラジアンで計算するのに役立ちます。ここで、X1と2は、後で説明するパラメーターです。この記事を進めていくと、状況がより明確になります。次に、それに関連付けられている構文を見てみましょう。メソッドnumpy.arctan2()は、Arctan2は4象限の逆関数です。これを考慮に入れると、0から2piの間の値が得られます。この機能の範囲は-180〜180度です。これらは、Arctan2とarctanの機能を区別する2つの重要なポイントです。arr1
/の要素ごとのアークタンジェントを計算します。 arr2
および象限を正しく選択します。象限は、arctan2(x1、x2)
が、原点で終了し、点(1、0)
を通過する光線と原点で終わり、点(x2、x1)
を通過する光線。ArctanとArctan2の違い
このセクションでは、2つのNumpy関数の違いについて説明します。
表{背景:#f1f1f1;ボーダー:10px #fff; } TD、TH {パディング:10px;ボーダー:1pxソリッド#fff; }
NumPy arctan < / td> NumPy arctan2 < td>arctanは2象限の逆関数です。 arctan2は4象限の逆関数です。 arctan関数の範囲は-90から90度。 arctan2の範囲は-180〜180度です。 この関数は単一の配列を受け入れます。 これ説明したように関数は2つの入力配列を取ります。
これで、NumPyarctan2の理論的な部分は終了です。このセクションでは、この機能がどのように機能し、必要な出力を得るのにどのように役立つかについて説明します。基本的な例から始めて、徐々により複雑な例に移ります。NumPyArctan2の例
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が得られます。 -度の答え。ここでは、円周率を3.14と見なしました。応答が一致するため、結果が検証されます。Numpy Arctan()の例#2
ここで、度の値も取得したいとします。これは単純なプロセスであり、forループと上記の式を使用して実行できます。方法を見てみましょう:import numpy as ppooldegree = 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の例#3
def doa(self、receiver、source):```計算ソースとレシーバーの到着方向```s_ind= self.key2ind(source)r_ind = self.key2ind(receiver)#レシーバーからソースへのベクトルv = self.X [:、s_ind] --self.X [: 、r_ind] azimuth =np.arctan2
(v [1]、v [0])elevation =np.arctan2
(v [2]、la.norm(v [ :2]))azimuth = azimuth + 2 * np.pi ifazimuth<0。elseazimuthelevation= height + 2 * np.pi if height<0。elseelevationreturn np.array([azimuth、elevation])NumPy Arctan2の例#4
def mtx_freq2visi(M、p_mic_x、p_mic_y): "" "フーリエ系列を可視性にマッピングする行列を作成します:paramM:フーリエ系列の展開は-MからMに制限:param p_mic_x:マイクを含むベクトルx座標:paramp_mic_y:マイクを含むベクトルy座標:return: "" "num_mic = p_mic_x.size ms = np.reshape(np.arange(- M 、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):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_qqp、p_x_qp) -1j)** ms * sp.special.jv(ms、norm_p_qqp)* np.exp(1j * ms * phi_qqp)count_G + = 1 return GNumPy Arctan2例#5
def vector_angle(u、v、direction = None):```vector_angle(u、v)は、2つのベクトル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 direction is True:returnnp.arctan2
(v [1]、v [0])-np。 arctan2(u [1]、u [0])elif方向がFalse:returnnp.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 returnnp.arctan2
(np.dot(axis2、v)、np.dot(axis1、v))NumPy Arctan2の例#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例#7
def stanleyControl(state、cx、cy、cyaw、last_target_idx): "" ":param state:(State object):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.v。 #ステアリング制御delta = theta_e + theta_d return delta、current_target_idx、error_front_axlenp arctan2例#8
def calcTargetIndex(state、cx、cy): "" ":param state: (状態オブジェクト):paramcx:[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_axleNumPy 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 =この記事では、NumPyのarctan2について説明します。さらに、その構文とパラメーターも確認しました。理解を深めるために、いくつかの例を見ました。結局、NumPy arctan2は、この関数が2点間の逆tan値を見つけるのに役立つ関数であると結論付けることができます。デフォルトではラジアンで値を返しますが、上記の方法を使用して度に変換できます。この記事があなたの疑問をすべて明らかにしたことを願っています。ただし、未解決の質問がある場合は、コメントセクションに自由に書き留めてください。それを読んだら、次の単位行列について読んでみませんか。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位置を取得しますPython atanまたはatan2、何を使用すればよいですか?
StackOverflowの質問
式f=arctan(ImZ / ReZ)
2つのオプションがあります:
オプション1(atan):
ImZ =- 4.593172163003 ImR =- 4.297336384845 &gt;&gt;&gt; z = y / x &gt;&gt;&gt; f1 = math.atan(z)&gt;&gt;&gt; f1 0.8186613519278327
オプション2(atan2)
&gt;&gt;&gt; f = math.atan2(y、x)&gt;&gt;&gt; f- 2.3229313016619604
これら2つの結果が異なるのはなぜですか?
回答:
Atanは1つの引数を取り、Atan2は2つの引数を取ります.1つではなく2つの引数を使用する目的は、計算された角度の適切な象限を返すために、入力の符号に関する情報を収集することです。これは不可能です。単一引数のAtanの場合
Atan2の結果は常に-piとpiの間にあります。
参照: https://en.wikipedia.org/wiki/Atan2
アーカイブバージョン
numpy。
arctan2 (arr1、 arr2、キャスト=&#39; same_kind&#39;、order =&#39; K&#39;、dtype = None、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と同じ形状の配列。
ここで: [array_like、optional] True値は、その位置でユニバーサル関数(ufunc)を計算することを意味し、False値は、出力に値を残すことを意味します1人。注:
2piラジアン=360度
慣例では、実数部が[-pi / 2、pi/にある角度zを返します。 2]。戻り値: arr1 /arr2の要素ごとのアークタンジェント。¬†値は、閉区間[-pi / 2、pi/2]にあります。
コード#1:動作
#Python3プログラムの説明
# arctan2 ()関数
 
import
numpy as np
 
arr1
<コードクラス="キーワード">=<コードクラス="プレーン">[<コードクラス="キーワード">-<コードクラス= "value"> 1、
+
1
、
+
1
、
-
1
]
arr2
= [
-
1
、
-
1
、
+
1
、
+
1
]
 
 
ans
=
np。
arctan2 (arr2、arr1) *
180
/
np.pi
 
(
"x-座標: "
、arr1)
印刷
(
"y-coordin ates:"
、arr2)
 
 
(
" 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。
])
 
(
"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
、