【Python】Numpyで線形代数を自由に使いこなす

Posted: , Category: Numpy , Python

numpyライブラリめちゃくちゃ便利ですよね。numpyには、線形代数のライブラリである、numpy.linalgモジュールが非常に便利です。

linalgモジュールは、BLAS、LAPCKを内部的にロードしており、非常に高速に行列演算を行うことができます。

本記事のまとめ方針としては、基本的にNumpyの公式ドキュメントの内容に基づいてまとめ、できるだけわかりやすく用途別にまとめでいきます。

本記事の内容
  • ベクトルのノルム(ユークリッド距離)を計算する方法
  • ベクトルの内積を計算する方法

ベクトルのノルム(ユークリッド距離)の計算

ベクトルのノルム

任意の次元(N次元とする)の2点$x$、$y$があったとき、ベクトルのノルム$d(x, y)$ は以下のように計算される。これはユークリッド距離とも言われている。

\begin{equation}
d(x, y) =  \sqrt{\sum_{i}^{N}(x_i - y_i)^2}
\end{equation}

Pythonを用いてこの定義通りに1から計算することもできますが、numpy.linalg.norm を用いると便利です。

x = np.array([0, 0])
y = np.array([2, 2])
d = np.linalg.norm(x-y)
# 2.8284271247461903

ベクトルの内積の計算をする方法

ベクトルの内積

N次元のベクトル$\bm{x}$、$\bm{y}$があったとき、内積$\bm{x} \cdot \bm{y}$ は次のように計算される。

\begin{equation}
\bm{x} \cdot \bm{y} = x_1y_1 + x_2 y_2 + \cdots + x_ny_n
\end{equation}

この計算も(2)の定義式からそのまま計算できますが、numpyの関数を使うと便利です。

x = [2, 3, 1, -1, 5, 10]
y = [4, 1, -1, 1, 5, 8]

np.dot(x, y)
# => 114
np.dot(y, x)
# => 114

(2)の定義式を見ても明らかですが、内積計算においては、2つのベクトルを交換しても同じ値になります。つまり、下記の交換則が成り立ちます。

\bm{x} \cdot \bm{y} = \bm{y} \cdot \bm{x} 

【広告】
統計学的にあなたの悩みを解決します。
仕事やプライベートでお悩みの方は、ベテラン占い師 蓮若菜にご相談ください。

機械学習と情報技術