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型の出力配列が生成されます。
numpy.diff()の主なパラメータ
第1引数: 入力配列です。
第2引数(n): 差分を取る回数です。0を指定した場合、入力はそのまま返されます。
第3引数(axis): 差分を計算する軸です。デフォルトは最後の軸です。
第4引数(prepend / append): 差分を計算する前に、指定した軸に沿って入力配列の先頭または末尾に追加する値です。スカラー値は、その軸方向には長さ1の配列として展開され、他のすべての軸については入力配列と同じ形状に拡張されます。
手順
まず、必要なライブラリをインポートします。
import numpy as np
array()メソッドを使ってNumPy配列を作成します。ここではint型の要素にnanを含めた配列を作成しています。
arr = np.array([[10, 15, 30, 65], [80, 87, np.nan, 120]])
配列を表示します。
print("Our Array...\n",arr)配列の次元数を確認します。
print("\nDimensions of our Array...\n",arr.ndim)データ型を確認します。
print("\nDatatype of our Array object...\n",arr.dtype)n階の離散差分を計算するために、numpy.diff()メソッドを使用します。axis=0を指定することで、行方向(縦方向)に沿って差分が計算されます。
print("\nDiscrete difference..\n",np.diff(arr, axis = 0))完全なコード例
import numpy as np
# array()メソッドを使ってNumPy配列を作成
# int型の要素にnanを含めている
arr = np.array([[10, 15, 30, 65], [80, 87, np.nan, 120]])
# 配列を表示
print("Our Array...\n",arr)
# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)
# データ型を確認
print("\nDatatype of our Array object...\n",arr.dtype)
# numpy.diff()メソッドでn階の離散差分を計算
print("\nDiscrete difference..\n",np.diff(arr, axis = 0))実行結果
Our Array... [[ 10. 15. 30. 65.] [ 80. 87. nan 120.]] Dimensions of our Array... 2 Datatype of our Array object... float64 Discrete difference.. [[70. 72. nan 55.]]
実行結果からわかるように、axis=0を指定したため、2行の配列から各行同士の差分が計算され、1行の配列が出力されました。また、nanを含む要素の差分もnanになっている点に注意してください。nanを含むデータに対して差分を計算したい場合は、事前にnp.nan_to_num()などで欠損値を処理しておくか、np.nansum()のようなnan対応関数の活用を検討するとよいでしょう。
-
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
-
Pythonで軸0に沿ったN次元配列の勾配を返す方法
勾配(グラディエント)は、内部の点では2次精度の中心差分を用いて計算され、境界では1次または2次精度の片側差分(前進差分または後退差分)を用いて計算されます。そのため、返される勾配は入力配列と同じ形状になります。np.gradient() 関数の主なパラメータは以下の通りです。第1パラメータ f: スカラー関数のサンプル値を格納したN次元配列。第2パラメータ varargs: f の値間の間隔(スペーシング)。デフォルトではすべての次元で単位間隔となります。第3パラメータ edge_order {1, 2}: 境界における差分の精度次数を指定します。デフォルトは 1。第4パラメータ axis: