ベクトルの大きさ
ユークリッドノルム
2 次元ベクトル $\boldsymbol{v}=\begin{bmatrix}v_1\\v_2\end{bmatrix}$ の大きさ(長さ)は
\[\parallel\boldsymbol{v}\parallel=\sqrt{v_1^2+v_2^2}\]
によって定義されます。$n$ 次元ベクトルについても同様に、
\[\parallel\boldsymbol{v}\parallel=\sqrt{v_1^2+v_2^2+\ \cdots\ +v_n^2}\tag{1}\]
と定義します。一般に (1) によって定義された量を ユークリッドノルム (Euclidean norm) とよびます。ユークリッドノルムは numpy.sqrt() と numpy.sum() を使って実装できます。
# SLA_002
import numpy as np
# ベクトルを定義
v = np.array([1, 2, 3])
# ベクトルvの大きさ(ノルム)を計算
v_n = np.sqrt(np.sum(v**2))
print("|v| = {:.3f}".format(v_n))
|v| = 3.742
scipy.linalg.norm()
scipy.linalg.norm() を使ってベクトルの大きさを計算することができます。
第 1 引数 a にベクトル (1次元配列) を渡すと、ベクトルの大きさ (ユークリッドノルム) を返します。
# SLA_003-1
import numpy as np
from scipy.linalg import norm
# ベクトルを定義
v = np.array([1, 2, 3])
# ベクトルvの大きさ(ノルム)を計算
v_n = norm(v)
print("|v| = {:.3f}".format(v_n))
|v| = 3.742
第 1 引数に 2 次元配列を渡して axis で軸を指定すると、軸に沿ってノルムを計算します。
たとえば、ベクトル [1 2 3] の大きさと、ベクトル [4 5 6] の大きさをまとめて計算することができます:
# SLA_003-2
# 2次元配列を定義
a = np.array([[1, 2, 3],
[4, 5, 6]])
# 第1軸(横軸)に沿ってノルムを計算
a_n = norm(a, axis = 1)
# 数値を丸める
a_n = np.round(a_n, 3)
print("|a_n| = {}".format(a_n))
|a_n| = [3.742 8.775]
NumPy にも numpy.linalg.norm() という関数が用意されていますが、機能は scipy.linalg.norm() とほとんど同じなので解説は割愛します。
世界標準MIT教科書 ストラング:線形代数イントロダクション 新品価格 | ![]() |

単位ベクトル
長さ $1$ のベクトルは 単位ベクトル とよばれます。
任意のベクトル $\boldsymbol{v}$ を自身の長さ $\parallel\boldsymbol{v}\parallel$ で割れば単位ベクトルとなります。
たとえば、$\boldsymbol{v}=\begin{bmatrix}1\\1\end{bmatrix}$ の長さは $\sqrt{1^2+1^2}=\sqrt{2}$ なので、
\[\boldsymbol{v}=\frac{1}{\sqrt{2}}\begin{bmatrix}1\\1\end{bmatrix}\]
は単位ベクトルです。
# SLA_004-1
import numpy as np
from scipy.linalg import norm
np.set_printoptions(precision=3)
# ベクトルを定義
v = np.array([1, 1])
# 単位ベクトルを作成
u = v / norm(v)
print(u)
[0.707 0.707]
複数のベクトルの大きさを $1$ に揃えることもできます。
# SLA_004-2
# 2次元配列を定義
a = np.array([[1, 2, 3],
[4, 5, 6]])
# 行ベクトルを正規化
a = a / norm(a, axis = 1, keepdims=True)
print("a:\n{}".format(a))
# 行ベクトルのノルムを確認
a_norm = norm(a, axis = 1, keepdims=True)
print("aのノルム:\n{}".format(a_norm))
a: [[0.267 0.535 0.802] [0.456 0.57 0.684]] aのノルム: [[1.] [1.]]
コメントを書く