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

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 として伝播することが確認できます。

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

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

  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型の出力配列