numpy.dot の使い方- ベクトルの内積を求める

numpy.dot は、ベクトルの内積(ドット積)を求めるための関数です。このページでは、これの使い方について詳しく解説します。それでは解説を始めましょう。

目次

1. ベクトルの内積とは

ベクトルの内積 \(\vec{v}\cdot\vec{w}\) とは、一言でいうと \(\vec{v}\) に対する \(\vec{w}\) の射影の長さです。以下のアニメーションで簡単に表しています。

詳しい解説は『ベクトルの内積とは?その意味と計算方法』で行っているので、ぜひご覧ください。

計算方法は以下の通りです。

2次元ベクトルの内積の計算方法

\[
\vec{v}\cdot\vec{w}=
\left[ \begin{array}{cc} v_1 \\ v_2 \end{array} \right]
\cdot
\left[ \begin{array}{cc} w_1 \\ w_2 \end{array} \right]
=v_1\cdot w_1+ v_2\cdot w_2
\]

3次元ベクトルの内積の計算方法

\[
\vec{v}\cdot\vec{w}=
\left[ \begin{array}{cc} v_1 \\ v_2 \\ v_3\end{array} \right]
\cdot
\left[ \begin{array}{cc} w_1 \\ w_2 \\ w_3 \end{array} \right]
=v_1\cdot w_1+ v_2\cdot w_2 + v_3\cdot w_3
\]

numpy.dot は、このベクトルの内積を求めるための関数です。それでは次から使い方を見ていきましょう。

2. numpy.dot の使い方

numpy.dot の書き方は以下の通りです。

numpy.dot

書き方

np.dot(a, b, out=None)

パラメーター

引数 解説
a   array_like     第一引数。1次元配列を渡す。
b   array_like  第二引数。1次元配列を渡す。
out*   ndarray  これを指定した場合、指定した配列をドット積を行った新しい配列で上書きします。ここに指定する配列は、生成される配列と同じshape, dtypeで、必ずC言語方式のメモリレイアウトである必要があります。それらが一致しない場合はエラーになります。
* はオプション引数であることを示します。

公式ドキュメント:numpy.dot

オプション引数の out は使う機会は少ないため、基本的には1次元配列 a とb を渡すだけです。それではサンプルコードを見て、使い方を確認しましょう。

2次元ベクトルの内積を取得

まずは2次元ベクトル同士の内積を取得してみましょう。次のように書きます。なお numpy の配列では、ベクトルは横ベクトルで表します。

In [1]:
import numpy as np
v=np.array([1,0])
w=np.array([2, -1])
np.dot(v, w)
Out[1]:
2

ベクトルの内積 2 が出力されました。

3次元ベクトルの内積を取得

続いて3次元ベクトルの内積も取得してみましょう。

In [2]:
import numpy as np
v=np.array([2,1,3])
w=np.array([1, -2, -1])
np.dot(v, w)
Out[2]:
-3

ベクトルの内積−3が出力されました。

注意点

numpy.dot がベクトルの内積を返すのは、1次元配列同士の演算の場合です。numpy では1次元配列がベクトルを表すからです。

2次元以上の配列を渡した場合は、以下のようになります。

a b 戻り値
2次元配列     2次元配列 行列の積
※np.matmul(a, b) または a@b 推奨
0次元配列   N次元配列   スカラー倍
※np.multiply(a, b) または a*b 推奨
N次元配列 1次元配列  a の1次元軸の要素とb との内積の和
N次元配列 M次元配列    a の1次元軸の要素とb の2次元軸の要素の内積の和

ただし混乱を防ぐために、numpy.dot は基本的にベクトルの内積を求める目的で使うべきです。行列の積には、numpy.matmul を、スカラー倍には numpy.multiply を使うようにしましょう。

また numpy.dot では複素共役ふくそきょうやくを取得することはできません。この場合は numpy.vdot を使います。

3. numpy.vdot の使い方

書き方は numpy.dot とまったく同じです。

numpy.vdot

書き方:

np.vdot(a, b)

パラメーター:

引数 解説
a   array_like     第一引数
b   array_like  第二引数

公式ドキュメント:numpy.vdot

サンプルコードで確認していきましょう。

2次元ベクトルの内積(複素共役)

以下の通り、複素共役を取得することができます。

In [1]:
import numpy as np
v=np.array([1+2j, 2+1j])
w=np.array([1+1j, 2+2j])
vw=np.vdot(v, w)
wv=np.vdot(w,v)

print(vw, wv)
(9+1j) (9-1j)
In [2]:
# numpy.dot との比較
np.dot(v,w)
Out[2]:
(1+9j)

3次元ベクトルの内積(複素共役)

念のため3次元ベクトルの場合も見ておきましょう。

In [3]:
import numpy as np
v=np.array([1+2j, 2+1j, 3+1j])
w=np.array([3+2j, 1+1j, 2+2j])
vw=np.vdot(v, w)
wv=np.vdot(w,v)

print(vw, wv)
(18+1j) (18-1j)
In [4]:
# numpy.dot との比較
np.dot(v,w)
Out[4]:
(4+19j)

4. まとめ

以上が numpy.dot の使い方です。混乱される方が多いので、もう一度、確認表を載せておきます。ただし、numpy.dot は基本的に1次元配列同士の場合(ベクトルの内積を取得する場合)に使うようにして、それ以外の目的での使用は控えましょう。

a b 戻り値
1次元配列  1次元配列 ベクトルの内積(複素共役は×)
2次元配列     2次元配列 行列乗算
※np.matmul(a, b) または a@b 推奨
0次元配列   N次元配列   スカラー乗算
※np.multiply(a, b) または a*b 推奨
N次元配列 1次元配列  a の1次元軸の要素とb との内積
N次元配列 M次元配列    a の1次元軸の要素とb の2次元軸の要素の内積



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる