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

Pythonでaxis=1に沿ったn次の離散差分を計算する方法

n次の離散差分を計算するには、numpy.diff()メソッドを使用します。1階差分は指定した軸に沿って out[i] = a[i+1] - a[i] として求められ、それより高次の差分はdiffを再帰的に適用することで計算されます。

diff()メソッドはn次の差分を返します。出力の形状は、axisの次元がnだけ小さくなる点を除けば、元の配列aと同じです。出力のデータ型は、aの任意の2要素間の差分の型と一致し、ほとんどの場合これはa自体の型と同じになります。ただし注目すべき例外として、datetime64型の場合はtimedelta64型の出力配列が生成される点が挙げられます。

numpy.diff()の主なパラメータ

  • 第1引数: 入力配列
  • 第2引数(n): 差分を取る回数。0を指定した場合は、入力配列がそのまま返されます
  • 第3引数(axis): 差分を計算する軸。デフォルトは最後の軸です
  • 第4引数(prepend/append): 差分計算の前に、axisに沿って入力配列の先頭または末尾に追加する値。スカラー値を指定すると、axis方向には長さ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)

numpy.diff()メソッドを使ってn次の離散差分を計算します。1階差分は out[i] = a[i+1] - a[i] で与えられ、高次の差分はdiffを再帰的に適用して求められます。

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, 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次の離散差分を計算
# 1階差分はout[i] = a[i+1] - a[i]、高次の差分は再帰的に計算されます
print("\nDiscrete difference..\n",np.diff(arr, axis = 1))

実行結果

Our Array...
[[ 10. 15. 30. 65.]
[ 80. 87. nan 120.]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Discrete difference..
[[ 5. 15. 35.]
[ 7. nan nan]]

このように、axis=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型の出力配列