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

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

勾配(グラディエント)は、内部の点では2次精度の中心差分を用いて計算され、境界では1次または2次精度の片側差分(前進差分または後退差分)を用いて計算されます。そのため、返される勾配は入力配列と同じ形状になります。

np.gradient() 関数の主なパラメータは以下の通りです。

  • 第1パラメータ f: スカラー関数のサンプル値を格納したN次元配列。
  • 第2パラメータ varargs: f の値間の間隔(スペーシング)。デフォルトではすべての次元で単位間隔となります。
  • 第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() を使用し、axis = 0 を指定して勾配を計算します。勾配は内部の点では2次精度の中心差分、境界では片側差分によって求められ、結果は入力配列と同じ形状になります。

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

コード例

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)

# 軸0に沿って勾配を計算
# 内部点では2次精度の中心差分、境界では片側差分が使用される
print("\nResult (gradient)...\n",np.gradient(arr, axis = 0))

実行結果

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

Dimensions of our Array...
2

Datatype of our Array object...
float64

Result (gradient)...
[[50. 50. 63.]
[50. 50. 63.]]

このように、np.gradient() に axis = 0 を指定することで、2次元配列の行方向(軸0)に沿った勾配を簡単に求めることができます。各行ごとの隣接要素の差分から勾配が計算され、元の配列と同じ形状の結果が得られます。

  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でaxis=0に沿ってn階の離散差分を計算する方法

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