1. ベクトルの外積とは
まずはベクトルの外積について軽くおさらいしておきましょう。これは2つのベクトルが作る平行四辺形に対して垂直な方向に伸びるベクトルのことです。そして、ベクトルの外積の長さは、平行四辺形の面積と等しくなります。以下のアニメーションでご確認ください。
『ベクトルの外積とは何か?幾何学的な意味と計算方法の徹底解説』で詳しく解説しているので、ぜひご確認ください。
なお計算方法は以下の通りです。
ベクトルの外積の求め方
\[
\vec{v}\times\vec{w}=
\left[ \begin{array}{cc} v_1 \\ v_2 \\ v_3 \end{array} \right]
\times
\left[ \begin{array}{cc} w_1 \\ w_2 \\ w_3 \end{array} \right]
=
\left[ \begin{array}{cc}
v_2w_3-w_2v_3 \\
-v_1w_3+w_1v_3 \\
v_1w_2-w_1v_2
\end{array} \right]
\]
PythonではNumPyのnumpy.cross
関数を使うことで、簡単にベクトルの外積を求めることができます。
2. numpy.cross の使い方
numpy.cross
の書き方は以下の通りです。
書き方
np.cross(a ,b, axisa=-1, axisb=-1, axisc=-1, axis=None)
パラメーター
引数 | 型 | 解説 |
---|---|---|
a | array_like | 1つ目のベクトルを入力します。 |
b | array_like | 2つ目のベクトルを入力します。 |
axisa* | int | 文中で解説します。 |
axisb* | int | |
axisc* | int | |
axis* | int | |
* はオプション引数であることを示します。 |
公式ドキュメント:numpy.cross
それではサンプルコードを見て確認していきましょう。
2.1. ベクトルの外積を求める
2つの3次元ベクトルを入力すると、その外積を返します。
import numpy as np
v=np.array([1,2,1])
w=np.array([-1,3,0])
np.cross(v, w)
一方が2次元ベクトルの場合は、その2次元ベクトルのz軸成分を0として計算します。
# 一方が2次元の場合はz軸を0として計算
v=np.array([1,2,1])
w=np.array([-1,3])
np.cross(v, w)
2.2. 平行四辺形の面積を求める
両方とも2次元ベクトルの場合は、その2つのベクトルが作る平行四辺形の面積を返します。
# 両方2次元ベクトルの場合は面積を計算
v=np.array([1,2])
w=np.array([-1,3])
np.cross(v, w)
2.3. 複数のベクトルの外積を一括取得
以下のように書くと、それぞれの列ベクトル同士の外積を返します。
import numpy as np
v=np.array([[1,2,3],[4,5,6],[7,8,9]])
w=np.array([[4,5,6],[3,2,1],[9,8,7]])
np.cross(v, w)
これらは具体的には、次の計算結果を返しています。
\[
\left[ \begin{array}{cc} 1 \\ 2 \\3 \end{array} \right]
\times
\left[ \begin{array}{cc} 4 \\ 5 \\6 \end{array} \right]
=
\left[ \begin{array}{cc} -3 \\ 6 \\ -3 \end{array} \right],
\hspace{7mm}
\left[ \begin{array}{cc} 4 \\ 5 \\ 6 \end{array} \right]
\times
\left[ \begin{array}{cc} 3 \\ 2 \\1 \end{array} \right]
=
\left[ \begin{array}{cc} -7 \\ 14 \\ -7 \end{array} \right],
\hspace{7mm}
\left[ \begin{array}{cc} 7 \\ 8 \\9 \end{array} \right]
\times
\left[ \begin{array}{cc} 9 \\ 8 \\7 \end{array} \right]
=
\left[ \begin{array}{cc} -16 \\ 32 \\ -16 \end{array} \right]
\]
このように列ベクトル同士の外積を返しますが、オプション引数 axisa
, axisb
を使うと、行ベクトル同士の外積や、一方の列ベクトルと他方の行ベクトルの外積というように求める対象を指定することができます。
axisa
では先に入力した配列の軸を、axisb
では後で入力した配列の軸を指定します。以下は行ベクトル同士の外積を取得します。
np.cross(v, w, axisa=0, axisb=0)
2つのベクトルの軸を一括で指定したい場合は、オプション引数 axis
を使います。
np.cross(v, w, axis=0)
オプション引数 axisc
はベクトルの外積を、行ベクトルとして出力するのか、列ベクトルとして出力するのかを指定するものです。
np.cross(v, w, axis=0, axisc=0)
3. まとめ
以上がNumPyでベクトルの外積を求める方法です。
コメント