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

Python NumPyで軸0に沿ったベクトルのノルムを計算する方法(線形代数)

PythonのNumPyを使って線形代数における行列やベクトルのノルムを求めるには、numpy.linalg.norm()メソッドを使用します。この記事では、特にaxis=0を指定して、各列(軸0)に沿ったベクトルのノルムを計算する方法を詳しく解説します。

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([[ 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)

線形代数で行列またはベクトルのノルムを返すには、Python NumPyのLA.norm()メソッドを使用し、axis=0を指定します。

print("\nResult...\n",LA.norm(arr, axis = 0))

完全なコード例

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)

# 軸0に沿ってベクトルのノルムを計算
print("\nResult...\n",LA.norm(arr, axis = 0))

出力結果

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...
    [1.41421356 2.23606798 5. ]

結果の解説

上記の出力からわかるように、axis=0を指定すると、各列ごとにユークリッドノルム(L2ノルム)が計算されます。具体的には以下のように計算されています。

  • 1列目:√(1² + (-1)²) = √2 ≈ 1.41421356
  • 2列目:√(2² + 1²) = √5 ≈ 2.23606798
  • 3列目:√(3² + 4²) = √25 = 5.0

このように、axis=0は「列方向」に沿って各列を1つのベクトルとみなし、そのノルムを要素ごとに返します。同様にaxis=1を指定すれば行ごとのノルムを取得できます。

  1. 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

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

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