PythonでNaNを1として扱い、axis=0に沿った配列要素の累積積を返す方法(NumPy nancumprod)
指定した軸に沿って配列要素の累積積を返し、その際NaNを1として扱うには、NumPyのnancumprod()メソッドを使用します。累積積はNaNに遭遇しても変化せず、先頭にあるNaNは1に置き換えられます。また、すべてがNaNまたは空のスライスに対しては、1が返されます。
nancumprod()メソッドのパラメータ
このメソッドは、outが指定されていない限り、結果を格納する新しい配列を返します。outが指定された場合は、その配列が返されます。累積の動作は「5 → 5×10 → 5×10×15 → 5×10×15×20」のように進んでいきます。
- 第1パラメータ: 入力配列です。
- 第2パラメータ(axis): 累積積を計算する軸です。デフォルトでは入力配列はフラット化されます。
- 第3パラメータ(dtype): 返される配列の型、および要素を乗算するアキュムレータの型です。dtypeが指定されない場合、入力配列の整数型の精度がデフォルトのプラットフォーム整数より低いケースを除いて、入力配列のdtypeがデフォルトになります。該当する場合は、デフォルトのプラットフォーム整数が代わりに使用されます。
- 第4パラメータ(out): 結果を格納する代替出力配列です。期待される出力と同じ形状およびバッファ長を持つ必要がありますが、必要に応じて結果の値の型はキャストされます。
手順
まず、必要なライブラリをインポートします。
import numpy as np
array()メソッドを使ってnumpy配列を作成します。ここでは、int型の要素にnanを含めています。
arr = np.array([[5, 10, 15], [20, np.nan, 30]])
配列を表示します。
print("Our Array...\n",arr)
配列の次元数を確認します。
print("\nDimensions of our Array...\n",arr.ndim)
配列のデータ型を取得します。
print("\nDatatype of our Array object...\n",arr.dtype)
NaNを1として扱いながら、指定した軸(ここではaxis=0)に沿って配列要素の累積積を返すには、nancumprod()メソッドを使用します。累積積はNaNに遭遇しても変化せず、先頭のNaNは1に置き換えられます。すべてがNaNまたは空のスライスに対しては1が返されます。
print("\nCumulative Product of array elements...\n",np.nancumprod(arr, axis = 0))
完全なコード例
import numpy as np
# array()メソッドを使ってnumpy配列を作成
# int型の要素にnanを含めている
arr = np.array([[5, 10, 15], [20, np.nan, 30]])
# 配列を表示
print("Our Array...\n",arr)
# 次元数を確認
print("\nDimensions of our Array...\n",arr.ndim)
# データ型を取得
print("\nDatatype of our Array object...\n",arr.dtype)
# NaNを1として扱い、axis=0に沿って配列要素の累積積を返す
print("\nCumulative Product of array elements...\n",np.nancumprod(arr, axis = 0))
出力結果
Our Array... [[ 5. 10. 15.] [20. nan 30.]] Dimensions of our Array... 2 Datatype of our Array object... float64 Cumulative Product of array elements... [[ 5. 10. 15.] [100. 10. 450.]]
出力を見ると、2行目のNaNは1として扱われているため、累積積の計算が中断されることなく処理されていることが分かります。具体的には、1列目は「5 × 20 = 100」、2列目は「10 × 1 = 10」、3列目は「15 × 30 = 450」と計算されています。
-
PythonでNaNを0として扱い、軸0に沿った配列要素の累積和を返す方法
NaN(非数)をゼロとして扱いながら、指定した軸に沿って配列要素の累積和を返すには、NumPyのnancumsum()メソッドを使用します。このメソッドの特徴は以下の通りです。累積和の計算中にNaNが現れても、それ以降の累積和の値は変化しません先頭に現れたNaNはゼロに置き換えられますすべてがNaNであるスライスや空のスライスに対しては、ゼロが返されます累積和とは、「5」「5+10」「5+10+15」「5+10+15+20」のように、それまでの要素を順番に足し合わせていく計算のことです。nancumsum()メソッドのパラメータ第1パラメータ(入力配列): 累積和を計算する対象となる配列です。
-
Pythonで軸0に沿ったN次元配列の勾配を返す方法
勾配(グラディエント)は、内部の点では2次精度の中心差分を用いて計算され、境界では1次または2次精度の片側差分(前進差分または後退差分)を用いて計算されます。そのため、返される勾配は入力配列と同じ形状になります。np.gradient() 関数の主なパラメータは以下の通りです。第1パラメータ f: スカラー関数のサンプル値を格納したN次元配列。第2パラメータ varargs: f の値間の間隔(スペーシング)。デフォルトではすべての次元で単位間隔となります。第3パラメータ edge_order {1, 2}: 境界における差分の精度次数を指定します。デフォルトは 1。第4パラメータ axis: