NumPyの配列の累積合計を取得するcumsum関数の使い方

np.cumsumは、指定の軸に沿って配列の累積合計を戻す関数です。これと同じものでndarray.cumsumメソッドもあります。このページでは、これらについて解説していきます。

なお累積合計(累積和)というと聴き慣れない人には馴染みが浅いかもしれませんが、様々な状況で使える便利な和です。ここではサンプルコードを見ていくことで、累積和が何かということもわかります。

それでは実際のコードで、このnp.cumsumについて確認していきましょう。

NumPy配列の合計・和を取得する操作まとめ
配列の合計値の操作に関しては、『NumPyの合計・和を取得する関数とメソッドまとめ』ですべて簡潔にまとめています。ぜひご確認ください。

目次

1. 書式

まずは基本的な書き方を確認しましょう。ご確認頂くとおり複数のオプション引数がありますが、基本的にはaxisだけ抑えておけば十分です。

numpy.cumsum

書き方:

np.cumsum(a, axis=None, dtype=None, out=None)

パラメーター:

引数 解説
a   array_like   配列を渡します。
axis*   int    累積合計を算出する際の次元軸を指定します。デフォルト値(None)の場合は、戻り値は1次元配列になります。
dtype*   dtype   新しく生成する配列のデータ型を指定します。指定しない場合は、元の配列のデータ型を引き継ぎます。
out*  ndarray  これを指定すると、指定したアウトプット先の配列を、新しく生成する配列で上書きします。アウトプット先の配列は、新しく生成される配列と同じshapeである必要があります。
* はオプション引数であることを示します。

戻り値: 

累積和を要素とする配列
新しく生成される配列のshapeは、引数に渡す元の配列と同じです。ただし、axis=None(デフォルト値)の場合、新しい配列は1次元配列になります。

一緒に確認したい関数:

  • sum: 配列の要素の合計値を取得
  • trapz: 配列の値を台形公式に統合
  • diff: 配列の軸方向の第n階差数列を取得
ndarray.cumsum
ndarray.cumsum(axis=None, dtype=None, out=None)

Notes

np.cumsum()は空の配列を渡すと、そのまま空の配列が返ってきます。

In [1]:
import numpy as np
arr = np.array([])
print(np.cumsum(arr))
[]

2. サンプルコード

それでは、実際のコードを見ながら使い方を確認していきましょう。

1次元配列の場合

np.cumsum()は配列の累積合計を求める関数です。1次元配列を渡すと、累積合計を求めた新しい配列を生成します。以下の配列a を例に見てみましょう。

In [1]:
import numpy as np
rng = np.random.default_rng()
a = rng.integers(0, 11, (5, ))
a
Out[1]:
array([ 6,  5, 10,  6, 10])

この配列a をnp.cumsum()に渡すと次のようになります。

In [2]:
# 多次元配列の場合も全要素の累積合計を返す
np.cumsum(a)
Out[2]:
array([ 6, 11, 21, 27, 37])

ndarray.cumsum()メソッドも同様です。

In [3]:
# メソッド
a.cumsum()
Out[3]:
array([ 6, 11, 21, 27, 37])

多次元配列の場合

多次元配列の場合も、デフォルトでは全要素の累積合計を算出します。以下の一連のコードをご確認ください。

In [1]:
import numpy as np
rng = np.random.default_rng()
a = rng.integers(0, 11, (3, 5))
a
Out[1]:
array([[ 8,  6, 10,  7, 10],
       [ 0,  7,  8,  3,  4],
       [ 6,  4,  0,  8,  0]])
In [2]:
# デフォルトでは全要素の累積和を求める
np.cumsum(a)
Out[2]:
array([ 8, 14, 24, 31, 41, 41, 48, 56, 59, 63, 69, 73, 73, 81, 81])
In [3]:
# メソッド
a.cumsum()
Out[3]:
array([ 8, 14, 24, 31, 41, 41, 48, 56, 59, 63, 69, 73, 73, 81, 81])

次元軸の指定(axis)

多次元配列では、axisで累積合計を求める次元軸を指定することができます。

以下は1次元軸(横軸)を指定した場合です。

In [4]:
# 1次元軸(横軸)方向の累積和を求める
np.cumsum(a, axis=-1)
Out[4]:
array([[ 8, 14, 24, 31, 41],
       [ 0,  7, 15, 18, 22],
       [ 6, 10, 10, 18, 18]])
In [5]:
# メソッド
a.cumsum(axis=-1)
Out[5]:
array([[ 8, 14, 24, 31, 41],
       [ 0,  7, 15, 18, 22],
       [ 6, 10, 10, 18, 18]])

以下は2次元軸(縦軸)を指定した場合です。

In [6]:
# 2次元軸(縦軸)方向の累積和を求める
np.cumsum(a, axis=0)
Out[6]:
array([[ 8,  6, 10,  7, 10],
       [ 8, 13, 18, 10, 14],
       [14, 17, 18, 18, 14]])
In [7]:
# メソッド
a.cumsum(axis=0)
Out[7]:
array([[ 8,  6, 10,  7, 10],
       [ 8, 13, 18, 10, 14],
       [14, 17, 18, 18, 14]])

3. まとめ

以上がnp.cumsumの使い方です。以下の関数も併せて確認しておくと良いでしょう。

  • sum: 配列の要素の合計値を取得
  • diff: 配列の軸方向の第n階差数列を取得



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる