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)に沿った勾配を簡単に求めることができます。各行ごとの隣接要素の差分から勾配が計算され、元の配列と同じ形状の結果が得られます。
-
PythonでNaNを0として扱い、軸0に沿った配列要素の累積和を返す方法
NaN(非数)をゼロとして扱いながら、指定した軸に沿って配列要素の累積和を返すには、NumPyのnancumsum()メソッドを使用します。このメソッドの特徴は以下の通りです。累積和の計算中にNaNが現れても、それ以降の累積和の値は変化しません先頭に現れたNaNはゼロに置き換えられますすべてがNaNであるスライスや空のスライスに対しては、ゼロが返されます累積和とは、「5」「5+10」「5+10+15」「5+10+15+20」のように、それまでの要素を順番に足し合わせていく計算のことです。nancumsum()メソッドのパラメータ第1パラメータ(入力配列): 累積和を計算する対象となる配列です。
-
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型の出力配列