Python NumPyのLA.norm()で指定した軸に沿ったベクトル・行列のノルムを計算する方法
線形代数におけるノルムの計算とは
線形代数において行列やベクトルのノルムを求めるには、Python NumPyのLA.norm()メソッドを使用します。ノルムとは、ベクトルや行列の「大きさ」を表す指標であり、機械学習や数値計算の分野で頻繁に利用されます。本記事では、指定した軸に沿ったノルムの計算方法を、具体的なコード例とともに解説します。
LA.norm()メソッドの主なパラメータ
第1引数(x):入力配列です。axisがNoneの場合、xは1次元または2次元である必要があります(ordがNoneの場合を除く)。axisとordがどちらもNoneの場合は、x.ravel()の2ノルムが返されます。
第2引数(ord):ノルムの次数を指定します。「inf」はNumPyのinfオブジェクト(無限大)を意味し、これを指定すると無限大ノルムが計算されます。デフォルトはNoneです。
第3引数(axis):整数を指定した場合、ベクトルノルムを計算する対象となるxの軸を指定します。2要素のタプルを指定した場合は、2次元行列を保持する軸を示し、その行列に対する行列ノルムが計算されます。axisがNoneの場合、xが1次元ならベクトルノルム、2次元なら行列ノルムが返されます。デフォルトはNoneです。
第4引数(keepdims):Trueに設定すると、ノルムを計算した軸がサイズ1の次元として結果に残ります。このオプションにより、結果が元の配列xに対して正しくブロードキャストされます。
実装の手順
まず、必要なライブラリをインポートします。
import numpy as np from numpy import linalg as LA
次に、配列を作成します。
arr = np.array([[ -4, -3, -2], [-1, 0, 1], [2, 3, 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)線形代数における行列またはベクトルのノルムを返すには、Python NumPyのLA.norm()メソッドを使用します。ここではordにnp.infを指定しています。
print("\nResult...\n",LA.norm(arr, np.inf))完全なコード例
import numpy as np
from numpy import linalg as LA
# 配列を作成
arr = np.array([[ -4, -3, -2],
[-1, 0, 1],
[2, 3, 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()メソッドでノルムを計算(ord=np.infを指定)
print("\nResult...\n",LA.norm(arr, np.inf))出力結果
Our Array... [[-4 -3 -2] [-1 0 1] [ 2 3 4]] Dimensions of our Array... 2 Datatype of our Array object... int64 Shape of our Array object... (3, 3) Result... 9.0
結果の解説
ordにnp.infを指定した場合、2次元配列に対しては「各行の要素の絶対値の合計のうち最大の値」が返されます。今回の例では、各行の絶対値の合計はそれぞれ9(|-4|+|-3|+|-2|)、2(|-1|+0+1)、9(2+3+4)となり、その最大値である9.0が出力されました。このように、ordとaxisの組み合わせを変えることで、さまざまな種類のノルムを柔軟に計算できます。
-
PythonでNaNを0として扱い、軸0に沿った配列要素の累積和を返す方法
NaN(非数)をゼロとして扱いながら、指定した軸に沿って配列要素の累積和を返すには、NumPyのnancumsum()メソッドを使用します。このメソッドの特徴は以下の通りです。累積和の計算中にNaNが現れても、それ以降の累積和の値は変化しません先頭に現れたNaNはゼロに置き換えられますすべてがNaNであるスライスや空のスライスに対しては、ゼロが返されます累積和とは、「5」「5+10」「5+10+15」「5+10+15+20」のように、それまでの要素を順番に足し合わせていく計算のことです。nancumsum()メソッドのパラメータ第1パラメータ(入力配列): 累積和を計算する対象となる配列です。
-
Pythonで軸0に沿ったN次元配列の勾配を返す方法
勾配(グラディエント)は、内部の点では2次精度の中心差分を用いて計算され、境界では1次または2次精度の片側差分(前進差分または後退差分)を用いて計算されます。そのため、返される勾配は入力配列と同じ形状になります。np.gradient() 関数の主なパラメータは以下の通りです。第1パラメータ f: スカラー関数のサンプル値を格納したN次元配列。第2パラメータ varargs: f の値間の間隔(スペーシング)。デフォルトではすべての次元で単位間隔となります。第3パラメータ edge_order {1, 2}: 境界における差分の精度次数を指定します。デフォルトは 1。第4パラメータ axis: