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

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}のいずれかを指定し、境界における差分の精度次数を決めます。デフォルトは1です。
  • 第4引数(axis):指定した軸に沿ってのみ勾配を計算します。デフォルト(axis=None)では入力配列のすべての軸に対して勾配が計算されます。axisには負の値も指定でき、その場合は最後の軸から逆順に数えます。

戻り値は、fの各次元に関する導関数に対応するndarrayのリストであり、それぞれの導関数は元の配列fと同じ形状を持ちます。

手順

まず、必要なライブラリをインポートします。

import numpy as np

array()メソッドを使ってNumPy配列を作成します。ここではfloat型の要素を持つ配列を定義しています。

arr = np.array([[20, 35, 57], [70, 85, 120]], dtype = float)

作成した配列を表示します。

print("Our Array...\n",arr)

配列の次元数を確認します。

print("\nDimensions of our Array...\n",arr.ndim)

配列のデータ型を確認します。

print("\nDatatype of our Array object...\n",arr.dtype)

np.gradient()では、内部点に2次精度の中心差分、境界に1次または2次精度の片側差分が使われます。ここではaxis=1を指定して、軸1(列方向)に沿った勾配を計算します。返される結果は入力配列と同じ形状になります。

print("\nResult (gradient)...\n",np.gradient(arr, axis = 1))

サンプルコード

import numpy as np

# array()メソッドでNumPy配列を作成
# float型の要素を含む配列を定義
arr = np.array([[20, 35, 57], [70, 85, 120]], dtype = float)

# 配列を表示
print("Our Array...\n",arr)

# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)

# データ型を確認
print("\nDatatype of our Array object...\n",arr.dtype)

# 内部点では2次精度の中心差分、境界では1次または2次精度の片側差分により勾配を計算。
# 返される勾配は入力配列と同じ形状になる。
print("\nResult (gradient)...\n",np.gradient(arr, axis = 1))

実行結果

Our Array...
[[ 20. 35. 57.]
[ 70. 85. 120.]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Result (gradient)...
[[15. 18.5 22. ]
[15. 25. 35. ]]

このように、np.gradient()にaxis=1を指定することで、各行に沿った隣接要素間の変化率(勾配)が簡単に求められます。数値解析やデータ処理において、離散データの微分値が必要な場面で非常に役立つ関数です。

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

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

  2. Pythonでaxis=0に沿ってn階の離散差分を計算する方法

    n階の離散差分を計算するには、numpy.diff()メソッドを使用します。指定した軸に沿って、1階の差分は out[i] = a[i+1] - a[i] として求められ、それより高次の差分はdiff()を再帰的に適用することで計算されます。diff()メソッドはn階の差分を返します。出力の形状は、差分を取る軸において元の配列より次元がnだけ小さくなることを除き、入力配列aと同じになります。出力のデータ型は、aの任意の2つの要素間の差分の型と同じであり、ほとんどの場合はa自体の型と一致します。ただし、注目すべき例外としてdatetime64型があり、この場合はtimedelta64型の出力配列