Python NumPy numpy.linalg.norm() 関数

Minahil Noor 2023年1月30日
  1. numpy.linalg.norm() の構文
  2. コード例:numpy.linalg.norm())
  3. コード例:2 次元配列のノルムを求めるための numpy.linalg.norm()
  4. コード例:axis パラメーターを使用してベクトルノルムと行列ノルムを検索するための numpy.linalg.norm()
  5. コード例:ord パラメーターを使用するための numpy.linalg.norm()
Python NumPy numpy.linalg.norm() 関数

Python NumPy numpy.linalg.norm() 関数は行列ノルムまたはベクトルノルムの値を求めます。パラメータ ord はこの関数が行列ノルムを求めるかベクトルノルムを求めるかを決定します。このパラメータにはいくつかの値が定義されています。

numpy.linalg.norm() の構文

numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)

パラメータ

x 配列のような構造になっています。これはノルムの値を求めるための入力配列です。パラメータ axis のデフォルト値は None であるので、配列は ordNone であれば一次元または二次元であるべきです。
ord 関数の戻り値はこのパラメータに依存します。ノルムの次数を定義します。いくつかの値がありますので、こちらを参照してください。
axis これは整数、None、または整数の 2つのタプルです。これが integer の場合、関数がベクトルノルムを求める軸を表します。デフォルト値は None であり、行列ノルムかベクトルノルムのどちらかを求めることを意味します。2 tuple の整数値の場合は行列ノルムの値を返します。
keepdims これはブール値のパラメータです。デフォルト値は False です。値が True の場合、ノルム軸の寸法を 1 に等しくして表示します。

戻り値

行列のノルムを float 値または N 次元配列の形で返します。

コード例:numpy.linalg.norm())

この関数を使って 1 次元配列のノルムを求めます。

from numpy import linalg as la
import numpy as np

x = np.array(
    [89, 34, 56, 87, 90, 23, 45, 12, 65, 78, 9, 34, 12, 11, 2, 65, 78, 82, 28, 78]
)

norm = la.norm(x)
print("The value of norm is:")
print(norm)

出力:

The value of norm is:
257.4800963181426

norm の値である float を返しました。

コード例:2 次元配列のノルムを求めるための numpy.linalg.norm()

これから 2 次元の配列を渡します。

from numpy import linalg as la
import numpy as np

x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])

norm = la.norm(x)
print("The value of norm is:")
print(norm)

出力:

The value of norm is:
129.35223229616102

パラメータ ordNone 以外の値を設定し、1 次元でも 2 次元でもない配列を渡すと、この関数は axis パラメータが None であるため ValueError を生成します。

from numpy import linalg as la
import numpy as np

x = np.array([[[4, 2], [6, 4]], [[5, 8], [7, 3]]])

norm = la.norm(x, "nuc")
print("The value of norm is:")
print(norm)

出力:

Traceback (most recent call last):
  File "C:\Test\test.py", line 6, in <module>
    norm = la.norm(x,'nuc')
  File "<__array_function__ internals>", line 5, in norm
  File "D:\WinPython\WPy64-3820\python-3.8.2.amd64\lib\site-packages\numpy\linalg\linalg.py", line 2557, in norm
    raise ValueError("Improper number of dimensions to norm.")
ValueError: Improper number of dimensions to norm.

コード例:axis パラメーターを使用してベクトルノルムと行列ノルムを検索するための numpy.linalg.norm()

最初にベクトルノルムを求めます。

from numpy import linalg as la
import numpy as np

x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])

norm = la.norm(x, axis=0)
print("The vector norm is:")
print(norm)

出力:

The vector norm is:
[41.78516483 80.95060222 91.83136719]

この関数は、計算されたベクトルノルムとして N 次元の配列を返していることに注意してください。

ここで、行列ノルムを求めます。パラメータ axis には、整数値の 2- タプル を渡します。

from numpy import linalg as la
import numpy as np

x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])

norm = la.norm(x, axis=(0, 1))
print("The value of matrix norm is:")
print(norm)

出力:

The value of matrix norm is:
129.35223229616102

コード例:ord パラメーターを使用するための numpy.linalg.norm()

パラメータ ord には複数の値があります。

from numpy import linalg as la
import numpy as np

x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])

norm = la.norm(x, "fro")
print("The value of matrix norm is:")
print(norm)

出力:

The value of matrix norm is:
129.35223229616102

この関数は Frobenius の行列ノルムの値を生成しました。

from numpy import linalg as la
import numpy as np

x = np.array([[11, 12, 5], [15, 6, 10], [10, 8, 12], [12, 15, 8], [34, 78, 90]])

norm = la.norm(x, "nuuc")
print("The value of matrix norm is:")
print(norm)

出力:

The value of matrix norm is:
152.28781231351272

この関数は行列ノルムを生成しました。これは特異値の和です。