NumPyのtan関数は、タンジェント(正接)の値を求めるための関数です。
タンジェント(正接)は、三角関数において角度θにおける サインθ/コサインθです。単位円(半径1の円)上において、サインθは角度θにおける円周上の接点の y座標 bであり、コサインθは接点の x座標 aですが、タンジェントθは、その接点における b/a です。タンジェントの値は 180°(π) の倍数では0 で、90°(π/2)と270°(3π/2)に近づくほど無限に近づいていきます。そして、90°(π/2)と180°(π)の間と、270°(3π/2)と360°(2π)の間では、負の値をとります。
NumPyでは、このタンジェントに関する関数として、以下の3つが用意されています。
- tan: ラジアンからタンジェントの値を求める。
- arctan: 逆三角関数のアークタンジェントを求める。
- arctan2: x座標とy座標からアークタンジェントを求める。
1. tan関数
np.tan関数は、y=tan(θ) におけるy の値を計算します。この値は、 sinθ/cosθ の値と同じです。それでは、tan関数の書式から確認しましょう。
1.1 書式
書き方:
np.tan(x)
引数 | 型 | 解説 |
x | array_like | ラジアンを要素とする配列を渡します。2πは360°です。 |
* この他に、キーワード引数としてufunc(ユニバーサル・ファンクション)を使用可能です。具体的には、out, where, axes, axis, keepdims, casting, order, dtype, subok, signature, extobj です。しかし、これらは高度な操作を行いたい時に使うものであり、基本的には使いません。 |
戻り値:
タンジェントの値を格納した配列 渡した配列x のそれぞれの要素ごとに計算したタンジェントの値を要素とする新しい配列を返します。x がスカラーの場合は、戻り値もスカラー(1つの数値のみの配列)になります。 |
1.2. サンプルコード
np.tan関数には、ラジアンを渡す必要があります。ラジアンでは π=180° です。そのため以下のコードはθが、15°、30°、45°、60°、90° の時のコサインの値を求めています。
import numpy as np
# np.pi = π
r = np.array([np.pi/12, np.pi/6, np.pi/4, np.pi/3, np.pi/2.4]) # np.pi = 180°
np.tan(r)
ラジアンではなく、通常の角度を数値で格納した配列をnp.cos関数に渡す時は、 ‘ * π/180 ‘ の演算を行うことでラジアンに変換することが可能です。
以下のコードで確認しましょう。
# 角度を格納した配列
x = np.array([15, 30, 45., 60., 75.])
# 角度をラジアンに変換 (np.piは円周率)
r = x * np.pi/180
# tan関数にラジアンを渡す
np.tan(r)
お馴染みのタンジェントカーブ(「正接波」)を描いてみましょう。
import matplotlib.pylab as plt
x = np.linspace(-np.pi, np.pi, 1000)
plt.plot(x, np.tan(x))
plt.xlabel('Angle [rad]')
plt.ylabel('tan(x)')
plt.axis('tight')
plt.show()
2. arctan関数
y = tan(x) のとき、 x = arctan(y) になります。arctan関数は、この時の xを計算します。つまりtanθの値を渡すことで、角度(ラジアン)の値 xを計算します。
2.1. 書式
書き方:
np.arctan(x)
引数 | 型 | 解説 |
x | array_like | tanθの値を要素とする配列を渡します。 |
* この他に、キーワード引数としてufunc(ユニバーサル・ファンクション)を使用可能です。具体的には、out, where, axes, axis, keepdims, casting, order, dtype, subok, signature, extobj です。しかし、これらは高度な操作を行いたい時に使うものであり、基本的には使いません。 |
戻り値:
角度の配列: 渡した配列x のそれぞれの要素ごとに計算したラジアンを要素とする新しい配列を返します。無限値 +-np.inf を渡した場合は +-pi/2 を返します。x がスカラーの場合は、戻り値もスカラー(1つの数値のみの配列)になります。 |
Note
arctan関数は、実数に対しては実数を返します。しかし、実数で表せない値や無限値(np.inf)に対しては、nanを生成します。複素数に対しては、ブランチカットとして1j以上infj以下、-1j以上-infj以下の値をとります。
2.2. サンプルコード
それではサンプルコードを見ていきましょう。
np.arctan関数は、tanθの値から θの角度を計算しラジアンで返します。
import numpy as np
# タンジェントθの値を渡す
np.arctan(0.57735027)
ラジアンを角度°に変換するには、円周率np.piで割って180を掛けます。
# ラジアンを角度に変換
np.arctan(0.57735027)/np.pi*180
関数に配列を渡すと、それぞれの要素ごとにラジアンを計算します。
# tanθの値を格納した配列を渡す
vtan = np.tan([np.pi/6, np.pi/4, np.pi/3])
r = np.arctan(vtan)
r
# 角度に変換
r/np.pi*180
アークタンジェントのカーブを描いてみましょう。
import matplotlib.pylab as plt
x = np.linspace(-10, 10, 1000)
plt.plot(x, np.arctan(x))
plt.xlabel('Angle [rad]')
plt.ylabel('arctan(x)')
plt.axis('tight')
plt.show()
3. arnctan2関数
arctan2関数は、座標(x2, x1)におけるアークタンジェント(角度θ)を計算する関数です。
3.1. 書式
書き方:
np.arctan2(x1, x2)
引数 | 型 | 解説 |
x1 | array_like(実数) | y座標の値を要素とする配列を渡します。 |
x2 | array_like(実数) | x座標の値を要素とする配列を渡します。x1とx2のshapeは一致しているか、ブロードキャスト可能である必要があります。 |
* この他に、キーワード引数としてufunc(ユニバーサル・ファンクション)を使用可能です。具体的には、out, where, axes, axis, keepdims, casting, order, dtype, subok, signature, extobj です。しかし、これらは高度な操作を行いたい時に使うものであり、基本的には使いません。 |
戻り値:
角度の配列: 渡した配列x1とx2 のそれぞれの要素ごとに計算したラジアンを要素とする新しい配列を返します。x1とx2がともにスカラーの場合は、戻り値もスカラー(1つの数値のみの配列)になります。 |
3.2. サンプルコード
それではサンプルコードを見てみましょう。以下のように、x座標とy座標の組み合わせからラジアンを返します。
import numpy as np
# x座標
x = np.array([-1, +1, +1, -1])
# y座標
y = np.array([-1, -1, +1, +1])
# 各座標ごとの角度
np.arctan2(y, x) * 180 / np.pi
x2(x座標)が0の時は次のように値を返します。
# x2=0の時も値を返します
np.arctan2([1., -1.], [0., 0.])
値の範囲はπ以上π以下で算出されます。
# -π以上π以下の値を返します
np.arctan2([0., 0., np.inf], [+0., -0., np.inf])
4. まとめ
以上が、NumPy配列のタンジェント(正接)の値を取得する関数です。それぞれ抑えておくと良いでしょう。なお、サイン(正弦)やコサイン(余弦)の値を取得については以下のページで解説しています。
コメント