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

PythonでNaNをゼロとして扱い、指定した軸に沿った配列要素の累積和を返す方法

NaN(非数)をゼロとして扱いながら、指定した軸に沿った配列要素の累積和を返すには、NumPyの nancumsum() メソッドを使用します。このメソッドでは、NaNに遭遇しても累積和は変化せず、先頭にあるNaNはゼロに置き換えられます。

すべてがNaNであるスライスや空のスライスに対しては、ゼロが返されます。out 引数が指定されない限り、結果を格納する新しい配列が返されます。結果は入力配列 a と同じサイズを持ち、axis が None でない場合、または a が1次元配列の場合は同じ形状になります。

累積和とは、たとえば 5、5+10、5+10+15、5+10+15+20 のように、要素を先頭から順番に足し合わせていく計算のことです。

nancumsum() の主なパラメータ

  • 第1引数(a): 入力配列です。
  • 第2引数(axis): 累積和を計算する軸です。デフォルト値は None で、その場合はフラット化された配列全体に対して累積和が計算されます。
  • 第3引数(dtype): 返される配列の型、および要素を合計する際のアキュムレータの型です。dtype が指定されていない場合、a の dtype がデフォルトとなります。ただし、a の整数型の精度がデフォルトのプラットフォーム整数より低い場合は、デフォルトのプラットフォーム整数が使用されます。
  • 第4引数(out): 結果を格納するための代替出力配列です。期待される出力と同じ形状・バッファ長を持つ必要がありますが、必要に応じて型はキャストされます。

実行手順

まず、必要なライブラリをインポートします。

import numpy as np

array() メソッドを使ってNumPy配列を作成します。ここでは int 型の要素に nan を含めています。

arr = np.array([[10, 20, 30], [40, np.nan, 60]])

配列を表示します。

print("Our Array...\n", arr)

次元数を確認します。

print("\nDimensions of our Array...\n", arr.ndim)

データ型を取得します。

print("\nDatatype of our Array object...\n", arr.dtype)

NaNをゼロとして扱いながら、指定した軸(ここでは axis=1)に沿った配列要素の累積和を返すには、nancumsum() メソッドを使用します。NaNに遭遇しても累積和は変化せず、先頭のNaNはゼロに置き換えられます。

print("\nCumulative Sum of array elements...\n", np.nancumsum(arr, axis = 1))

完全なコード例

import numpy as np

# array()メソッドを使ってNumPy配列を作成
# int型の要素にnanを含めています
arr = np.array([[10, 20, 30], [40, np.nan, 60]])

# 配列を表示
print("Our Array...\n", arr)

# 次元数を確認
print("\nDimensions of our Array...\n", arr.ndim)

# データ型を取得
print("\nDatatype of our Array object...\n", arr.dtype)

# NaNをゼロとして扱い、axis=1に沿った累積和を計算
# NaNに遭遇しても累積和は変化せず、先頭のNaNはゼロに置き換えられます
print("\nCumulative Sum of array elements...\n", np.nancumsum(arr, axis = 1))

実行結果

Our Array...
[[10. 20. 30.]
 [40. nan 60.]]

Dimensions of our Array...
2

Datatype of our Array object...
float64

Cumulative Sum of array elements...
[[ 10.  30.  60.]
 [ 40.  40. 100.]]

まとめ

np.nancumsum() を使うことで、欠損値(NaN)を含む配列でもエラーを出さずに累積和を計算できます。NaNは自動的にゼロとして処理されるため、実データの分析や前処理において非常に便利なメソッドです。通常の np.cumsum() では NaN が伝播して以降の合計がすべて NaN になってしまいますが、nancumsum() ならその心配はありません。

  1. PythonでNaNを0として扱い、軸0に沿った配列要素の累積和を返す方法

    NaN(非数)をゼロとして扱いながら、指定した軸に沿って配列要素の累積和を返すには、NumPyのnancumsum()メソッドを使用します。このメソッドの特徴は以下の通りです。累積和の計算中にNaNが現れても、それ以降の累積和の値は変化しません先頭に現れたNaNはゼロに置き換えられますすべてがNaNであるスライスや空のスライスに対しては、ゼロが返されます累積和とは、「5」「5+10」「5+10+15」「5+10+15+20」のように、それまでの要素を順番に足し合わせていく計算のことです。nancumsum()メソッドのパラメータ第1パラメータ(入力配列): 累積和を計算する対象となる配列です。

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

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