Python
 Computer >> コンピューター >  >> プログラミング >> Python

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の組み合わせを変えることで、さまざまな種類のノルムを柔軟に計算できます。

  1. PythonでNaNを0として扱い、軸0に沿った配列要素の累積和を返す方法

    NaN(非数)をゼロとして扱いながら、指定した軸に沿って配列要素の累積和を返すには、NumPyのnancumsum()メソッドを使用します。このメソッドの特徴は以下の通りです。累積和の計算中にNaNが現れても、それ以降の累積和の値は変化しません先頭に現れたNaNはゼロに置き換えられますすべてがNaNであるスライスや空のスライスに対しては、ゼロが返されます累積和とは、「5」「5+10」「5+10+15」「5+10+15+20」のように、それまでの要素を順番に足し合わせていく計算のことです。nancumsum()メソッドのパラメータ第1パラメータ(入力配列): 累積和を計算する対象となる配列です。

  2. Pythonで軸0に沿ったN次元配列の勾配を返す方法

    勾配(グラディエント)は、内部の点では2次精度の中心差分を用いて計算され、境界では1次または2次精度の片側差分(前進差分または後退差分)を用いて計算されます。そのため、返される勾配は入力配列と同じ形状になります。np.gradient() 関数の主なパラメータは以下の通りです。第1パラメータ f: スカラー関数のサンプル値を格納したN次元配列。第2パラメータ varargs: f の値間の間隔(スペーシング)。デフォルトではすべての次元で単位間隔となります。第3パラメータ edge_order {1, 2}: 境界における差分の精度次数を指定します。デフォルトは 1。第4パラメータ axis: