Python NumPyのLA.norm()で軸1に沿ったベクトルのノルムを求める方法
Python NumPyの線形代数モジュール(numpy.linalg)では、LA.norm()メソッドを使うことで、行列やベクトルのノルムを簡単に計算できます。本記事では、axis引数に1を指定して、配列の軸1(行方向)に沿ったベクトルノルムを求める方法を詳しく解説します。
LA.norm()メソッドの主な引数
x(第1引数)
入力配列を指定します。axisがNoneの場合、xは1次元または2次元である必要があります(ordがNoneの場合を除く)。axisとordがどちらもNoneの場合は、x.ravel()の2ノルムが返されます。
ord(第2引数)
ノルムの次数(オーダー)を指定します。「inf」はNumPyのinfオブジェクト(np.inf)を意味します。デフォルトはNoneです。
axis(第3引数)
整数を指定した場合、ベクトルノルムを計算する対象となるxの軸を指定します。2要素のタプルを指定した場合は、2次元行列を保持する軸を表し、それらの行列に対する行列ノルムが計算されます。axisがNoneの場合、xが1次元ならベクトルノルム、2次元なら行列ノルムが返されます。デフォルトはNoneです。
keepdims(第4引数)
Trueに設定すると、ノルムを計算した軸がサイズ1の次元として結果に残ります。このオプションにより、結果を元の配列xに対して正しくブロードキャストできるようになります。
実装手順
まず、必要なライブラリをインポートします。
import numpy as np from numpy import linalg as LA
次に、配列を作成します。
arr = np.array([[ 1, 2, 3], [-1, 1, 4]])
作成した配列を表示します。
print("Our Array...\n",arr)
配列の次元数を確認します。
print("\nDimensions of our Array...\n",arr.ndim)
配列のデータ型を取得します。
print("\nDatatype of our Array object...\n",arr.dtype)
配列の形状を取得します。
print("\nShape of our Array object...\n",arr.shape)
LA.norm()メソッドを使ってノルムを計算します。axis=1を指定することで、各行(軸1に沿ったベクトル)ごとにノルムが計算されます。
print("\nResult...\n",LA.norm(arr, axis = 1))
完全なコード例
import numpy as np
from numpy import linalg as LA
# 配列を作成
arr = np.array([[ 1, 2, 3],[-1, 1, 4]])
# 配列を表示
print("Our Array...\n",arr)
# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)
# データ型を取得
print("\nDatatype of our Array object...\n",arr.dtype)
# 形状を取得
print("\nShape of our Array object...\n",arr.shape)
# LA.norm()メソッドで軸1に沿ったベクトルノルムを計算
print("\nResult...\n",LA.norm(arr, axis = 1))
出力結果
Our Array...
[[ 1 2 3]
[-1 1 4]]
Dimensions of our Array...
2
Datatype of our Array object...
int64
Shape of our Array object...
(2, 3)
Result...
[3.74165739 4.24264069]
この結果から、1行目「[1, 2, 3]」のノルムは √(1² + 2² + 3²) = √14 ≒ 3.74165739、2行目「[-1, 1, 4]」のノルムは √((-1)² + 1² + 4²) = √18 ≒ 4.24264069 と計算されていることがわかります。つまり、axis=1を指定すると、各行をひとつのベクトルとみなしてユークリッドノルム(2ノルム)が求められます。
-
PythonでNumPyのnp.gradient()を使い、軸1に沿ったN次元配列の勾配を計算する方法
NumPyのnp.gradient()関数は、配列の数値微分(勾配)を計算するための便利なツールです。内部の点では2次精度の中心差分が用いられ、境界部分では1次または2次精度の片側差分(前方差分または後方差分)が適用されます。そのため、返される勾配は入力配列と同じ形状になります。np.gradient()の主な引数この関数には以下のような引数があります。第1引数(f):スカラー関数のサンプル値を格納したN次元配列を指定します。第2引数(varargs):fの各値の間隔(spacing)を指定します。デフォルトではすべての次元で単位間隔(1)が使用されます。第3引数(edge_order):{1
-
Pythonで軸0に沿ったN次元配列の勾配を返す方法
勾配(グラディエント)は、内部の点では2次精度の中心差分を用いて計算され、境界では1次または2次精度の片側差分(前進差分または後退差分)を用いて計算されます。そのため、返される勾配は入力配列と同じ形状になります。np.gradient() 関数の主なパラメータは以下の通りです。第1パラメータ f: スカラー関数のサンプル値を格納したN次元配列。第2パラメータ varargs: f の値間の間隔(スペーシング)。デフォルトではすべての次元で単位間隔となります。第3パラメータ edge_order {1, 2}: 境界における差分の精度次数を指定します。デフォルトは 1。第4パラメータ axis: