NumPyでベクトルの長さを1に正規化するには、np.linalg.normを使います。
ベクトルの例
例えば、要素数3のベクトルの長さ(より正確には、ユークリッド距離。すなわちL2ノルム)を1に正規化するには以下のようにします。
vec = np.array([3.0, 4.0, 5.0]) unit_vec = vec / np.linalg.norm(vec, ord=2) # ordは省略可 print(unit_vec) # [0.42426407 0.56568542 0.70710678] と表示
検算すると sqrt(0.42426407 ^ 2 + 0.56568542 ^ 2 + 0.70710678 ^ 2) ≒ 1.0で、たしかに正規化できています。
行列の例
要素数3の横ベクトルが縦に2つ並んだ行列(shapeが(2, 3))について、横ベクトルそれぞれのL2ノルムを1に正規化する例を以下に示します。
arr = [[3.0, 4.0, 5.0], [1.0, 2.0, 3.0]] arr /= np.linalg.norm(arr, ord=2, axis=1, keepdims=True) print(arr)
出力結果は以下です。
[[0.42426407 0.56568542 0.70710678] [0.26726124 0.53452248 0.80178373]]
要素数3の縦ベクトルが横に2つ並んだ行列(shapeが(3, 2))について、縦ベクトルそれぞれのL2ノルムを1に正規化する例を以下に示します。
arr = [[3.0, 1.0], [4.0, 2.0], [5.0, 3.0]] arr /= np.linalg.norm(arr, ord=2, axis=0, keepdims=True) print(arr)
出力結果は以下です。
[[0.42426407 0.26726124] [0.56568542 0.53452248] [0.70710678 0.80178373]]