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

Python・NumPyのnp.gradient()でN次元配列の勾配を計算し、edge_orderで境界の精度を指定する方法

NumPyのnp.gradient()関数を使うと、N次元配列の数値勾配(微分値)を簡単に求めることができます。この記事では、勾配の計算方法と、境界部分の精度を制御するedge_orderパラメータの使い方を、具体的なコード例とともに解説します。

np.gradient()の勾配計算の仕組み

np.gradient()では、配列の内部ポイントに対して2次精度の中心差分を使用し、境界(端)のポイントには1次または2次精度の片側差分(前進差分または後退差分)を適用して勾配が計算されます。そのため、返される勾配は入力配列と同じ形状になります。

主なパラメータ

  • 第1引数 f: スカラー関数のサンプル値を格納したN次元配列です。
  • 第2引数 varargs: fの値間の間隔(spacing)を指定します。デフォルトは全次元で単位間隔(1)になります。
  • edge_order {1, 2}: 境界における差分近似の次数を指定します。デフォルトは1です。2を指定すると、境界でも2次精度の差分で勾配が計算されます。
  • axis: 勾配を計算する軸(axis)を指定します。デフォルト(axis=None)では、入力配列のすべての軸に対して勾配が計算されます。負の値も指定でき、その場合は最後の軸から数えます。

この関数は、各次元に関する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)

内部ポイントでは2次精度の中心差分、境界では2次精度の片側差分を用いて勾配を計算します。edge_order=2を指定することで、境界でも高精度な結果が得られ、返される勾配は入力配列と同じ形状になります。

print("\nResult (gradient)...\n",np.gradient(arr, edge_order=2))

コード例全体

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次精度の中心差分、境界では2次精度の片側差分で勾配を計算
# 返される勾配は入力配列と同じ形状になる
print("\nResult (gradient)...\n",np.gradient(arr, edge_order=2))

出力結果

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

Dimensions of our Array...
1

Datatype of our Array object...
float64

Result (gradient)...
[11.5 18.5 17.5 14. 25. 45. ]

このように、np.gradient()edge_order=2を指定すると、境界部分でも2次精度の差分近似により高精度な勾配が計算されます。数値微分が必要な科学技術計算やデータ解析の場面で、ぜひ活用してください。

  1. Python・NumPyで文字列配列の各要素の長さを取得する方法

    文字列配列の各要素の長さを要素ごとに取得したい場合は、PythonのNumPyが提供する numpy.char.str_len() メソッドを使用します。このメソッドは、各文字列の長さを格納した整数型の出力配列を返します。実行手順まず、必要なライブラリをインポートします。import numpy as np次に、1次元の文字列配列を作成します。arr = np.array([Amy, Scarlett, Katie, Brad, Tom])作成した配列を表示してみましょう。print(Array...\n,arr)配列のデータ型を確認します。print(\nArray datatype...\

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

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