Pythonのnumpy.diff()で特定の軸に沿ったn次の離散差分を計算する方法
n次の離散差分を計算するには、numpy.diff()メソッドを使用します。1階差分は指定した軸に沿って out[i] = a[i+1] - a[i] として求められ、それより高い次数の差分は diff を再帰的に適用することで計算されます。
diff() メソッドはn次の差分を返します。出力の形状は、指定した軸の次元がnだけ小さくなる点を除けば、入力配列 a と同じです。出力のデータ型は、a の任意の2要素間の差分の型と一致し、ほとんどの場合は a 自身の型と同じになります。ただし注意すべき例外として、datetime64 型の場合は出力が timedelta64 型の配列になります。
主なパラメータ
- 第1引数(input): 入力となる配列です。
- 第2引数(n): 差分を取る回数です。0を指定した場合は、入力がそのまま返されます。
- 第3引数(axis): 差分を計算する軸です。デフォルトは最後の軸(-1)です。
- 第4引数(prepend / append): 差分計算の前に、指定した軸に沿って入力配列の先頭または末尾に追加する値です。スカラー値を渡すと、その軸方向には長さ1の配列へ拡張され、その他の軸については入力配列と同じ形状にブロードキャストされます。
実装の手順
まず、必要なライブラリをインポートします。
import numpy as np
array() メソッドを使ってNumPy配列を作成します。ここではint型の要素に加えて nan を含めています。
arr = np.array([[10, 15, 30, 65], [80, 87, 100, np.nan]])
作成した配列を表示します。
print("Our Array...\n", arr)配列の次元数を確認します。
print("\nDimensions of our Array...\n", arr.ndim)配列のデータ型を確認します。
print("\nDatatype of our Array object...\n", arr.dtype)numpy.diff() メソッドを使って離散差分を計算します。axis = 1 を指定することで、各行(水平方向)に沿って隣接する要素同士の差分が求められます。
print("\nDiscrete difference..\n", np.diff(arr, axis = 1))完全なコード例
import numpy as np
# array() メソッドでNumPy配列を作成
# int型の要素に nan を含めている
arr = np.array([[10, 15, 30, 65], [80, 87, 100, np.nan]])
# 配列を表示
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次の離散差分を計算
# 1階差分は out[i] = a[i+1] - a[i] で与えられ、
# 高次の差分は diff を再帰的に適用して計算される
print("\nDiscrete difference..\n", np.diff(arr, axis = 1))実行結果
Our Array... [[ 10. 15. 30. 65.] [ 80. 87. 100. nan]] Dimensions of our Array... 2 Datatype of our Array object... float64 Discrete difference.. [[ 5. 15. 35.] [ 7. 13. nan]]
このように、np.diff(arr, axis=1) を実行すると、各行内で隣り合う要素の差分が計算され、元の配列より列数が1つ少ない結果が得られます。また、nan を含む要素との差分も nan として伝播することが確認できます。
-
Pythonで軸0に沿ったN次元配列の勾配を返す方法
勾配(グラディエント)は、内部の点では2次精度の中心差分を用いて計算され、境界では1次または2次精度の片側差分(前進差分または後退差分)を用いて計算されます。そのため、返される勾配は入力配列と同じ形状になります。np.gradient() 関数の主なパラメータは以下の通りです。第1パラメータ f: スカラー関数のサンプル値を格納したN次元配列。第2パラメータ varargs: f の値間の間隔(スペーシング)。デフォルトではすべての次元で単位間隔となります。第3パラメータ edge_order {1, 2}: 境界における差分の精度次数を指定します。デフォルトは 1。第4パラメータ axis:
-
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型の出力配列