2024.6.11 ベクトルノルム【numpy】
=====
定義と用途
=====
任意の$ \mathbf{x}, \mathbf{y}\in {\cal R}^nと任意の実数$ aに対して以下の3つの性質を満たす関数$ ||\cdot ||のことをベクトルノルムとよぶ。
1. $ || \mathbf{x} || = 0 \leftarrow \rightarrow \mathbf{x} = \mathbf{0}_n
2. $ ||a\mathbf{x}|| = |a| \cdot ||\mathbf{x}||
3. $ ||\mathbf{x}|| + ||\mathbf{y}|| \geq ||\mathbf{x}+\mathbf{y}||
ベクトルの大きさの比較
2つのベクトルの差のノルムは、2つのベクトルの類似度の指標として利用できる
=====
いろいろなベクトルノルム
=====
$ {\bm x} = [x_1, x_2, \ldots , x_n]^\top のノルムを考える。まず、$ L^pノルムが与えられている。
$ ||\bm{x}||_p = {}^p \sqrt{|x_1|^p + |x_2|^p + \cdots + |x_n|^p}
code:norm_vector.py
import numpy as np
import numpy.linalg as npal
print('# ベクトルの主要なノルム')
data = 1, -5, 0, 4, -2
x = np.array(data, dtype=float)
この特殊な場合として以下の3つがよく利用される。
$ L^1ノルム、絶対値ノルム、絶対和ノルム
$ ||\bm{x}||_1 = |x_1| + |x_2| + \cdots + |x_n|
$ p=1の場合のノルム、各軸方向の長さの総和であることからマンハッタン距離を表している。
code:(続き).py
y1 = npal.norm(x, ord=1) # numpyによる
z1 = (np.abs(x)).sum() # 定義式による
print('# L1ノルム:', y1, z1)
$ L^2ノルム、2ノルム、ユークリッドノルム
$ ||\bm{x}||_2 = \sqrt{x_1^2 + x_2^2 + \cdots + x_n^2}
$ p=2の場合のノルム、ユークリッド距離を表している。
code:(続き).py
y2 = npal.norm(x, ord=2) # numpyによる
z2 = np.sqrt((np.power(x, 2).sum())) # 定義式による
print('# L2ノルム:', y2, z2)
$ L^\inftyノルム、$ \inftyノルム、最大値ノルム、supノルム
$ ||\bm{x}||_\infty = {}^\infty\sqrt{|x_1|^p + |x_2|^p + \cdots + |x_n|^p} \fallingdotseq |x_k|
但し、$ x_kは最も絶対値が大きい要素である。これは$ p=\inftyの場合に対応する。
つまり、ベクトルを構成する要素の内で最も大きな値を持つ要素の絶対値となる。
code:(続き).py
yinf = npal.norm(x, ord=np.inf) # numpyによる
zinf = np.max(np.abs(x)) # 定義式による
print('# Linfノルム:', yinf, zinf)
その他に 0ノルムがある。
ベクトルのゼロ以外の要素の数
code:(続き).py
z0 = npal.norm(x, ord=0)
print('# 0ノルム:', z0)
以上で示した$ L^pノルムにおいて、
$ 0 < p < 1の場合はノルムとはならない。
関連:2024.6.11 行列ノルム【numpy】