numpy – sum、prod、cumsum、cumprod の使い方

目次

概要

NumPy の総和、総乗、累積和、累積積を計算する関数について解説します。

関数一覧

numpy.sum

指定された軸方向に、配列の要素の総和を計算します。

numpy.sum(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>)
引数
名前 デフォルト値
a array_like
入力配列。
axis None int tuple of ints None
総和を計算する軸の方向。axis=None の場合、入力配列のすべての要素の総和を計算します。
dtype dtype None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
keepdims bool
True の場合、縮小される軸は、サイズ1として残されます。
initial scalar
総和の計算を開始する初期値。
返り値
名前 説明
sum_along_axis 出力配列。out を指定した場合は、その参照が返されます.

axis

axis で総和を計算する軸を指定できます。

In [1]:
import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print("axis=None", np.sum(a), sep="\n")
print("axis=0", np.sum(a, axis=0), sep="\n")
print("axis=1", np.sum(a, axis=1), sep="\n")
axis=None
45
axis=0
[12 15 18]
axis=1
[ 6 15 24]

In [2]:
a = np.array([[[1, 2, 3],
               [4, 5, 6],
               [7, 8, 9]],
              [[11, 12, 13],
               [14, 15, 16],
               [17, 18, 19]]])
print("axis=(1, 2)", np.sum(a, axis=(1, 2)), sep="\n")
axis=(1, 2)
[ 45 135]

keepdims

keepdims=True の場合、 縮小される軸は、サイズ1として残されます。

In [3]:
import numpy as np

a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print("axis=None", np.sum(a, keepdims=True), sep="\n")
print("axis=0", np.sum(a, axis=0, keepdims=True), sep="\n")
print("axis=1", np.sum(a, axis=1, keepdims=True), sep="\n")

a = np.array([[[1, 2, 3],
               [4, 5, 6],
               [7, 8, 9]],
              [[11, 12, 13],
               [14, 15, 16],
               [17, 18, 19]]])
print(np.sum(a, axis=(1, 2), keepdims=True))
axis=None
[[45]]
axis=0
[[12 15 18]]
axis=1
[[ 6]
 [15]
 [24]]
[[[ 45]]

 [[135]]]

numpy.prod

指定された軸方向に、配列の要素の総乗を計算します。

numpy.prod(a, axis=None, dtype=None, out=None, keepdims=<no value>, initial=<no value>)
引数
名前 デフォルト値
a array_like
入力配列。
axis None int tuple of ints None
総乗を計算する軸の方向。axis=None の場合、入力配列のすべての要素の総乗を計算します。
dtype dtype None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
keepdims bool
True の場合、縮小される軸は、サイズ1として残されます。
initial scalar
総乗の計算を開始する初期値。
返り値
名前 説明
product_along_axis 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [4]:
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print("axis=None", np.prod(a), sep="\n")
print("axis=0", np.prod(a, axis=0), sep="\n")
print("axis=1", np.prod(a, axis=1), sep="\n")
axis=None
362880
axis=0
[ 28  80 162]
axis=1
[  6 120 504]

numpy.cumsum

指定された軸方向に、配列の要素の累積和を計算します。

numpy.cumsum(a, axis=None, dtype=None, out=None)
引数
名前 デフォルト値
a array_like
入力配列。
axis int None
累積和を計算する軸の方向。axis=None の場合、入力配列を1次元配列にして、累積和を計算します。
dtype dtype None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
返り値
名前 説明
cumsum_along_axis 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [5]:
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print("axis=None", np.cumsum(a), sep="\n")
print("axis=0", np.cumsum(a, axis=0), sep="\n")
print("axis=1", np.cumsum(a, axis=1), sep="\n")
axis=None
[ 1  3  6 10 15 21 28 36 45]
axis=0
[[ 1  2  3]
 [ 5  7  9]
 [12 15 18]]
axis=1
[[ 1  3  6]
 [ 4  9 15]
 [ 7 15 24]]

numpy.cumprod

指定された軸方向に、配列の要素の累積積を計算します

numpy.cumprod(a, axis=None, dtype=None, out=None)
引数
名前 デフォルト値
a array_like
入力配列。
axis int None
累積積を計算する軸の方向。axis=None の場合、入力配列を1次元配列にして、累積積を計算します。
dtype dtype None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
返り値
名前 説明
cumprod 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [6]:
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print("axis=None", np.cumprod(a), sep="\n")
print("axis=0", np.cumprod(a, axis=0), sep="\n")
print("axis=1", np.cumprod(a, axis=1), sep="\n")
axis=None
[     1      2      6     24    120    720   5040  40320 362880]
axis=0
[[  1   2   3]
 [  4  10  18]
 [ 28  80 162]]
axis=1
[[  1   2   6]
 [  4  20 120]
 [  7  56 504]]

numpy.nansum

NaN は 0 として、指定された軸方向に、配列の要素の総和を計算します。

numpy.nansum(a, axis=None, dtype=None, out=None, keepdims=<no value>)
引数
名前 デフォルト値
a array_like
入力配列。
axis {int, tuple of int, None} None
総和を計算する軸の方向。axis=None の場合、入力配列のすべての要素の総和を計算します。
dtype data-type None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
keepdims bool
True の場合、縮小される軸は、サイズ1として残されます。
返り値
名前 説明
nansum 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [7]:
a = np.array([[1, 2, np.nan],
              [4, 5, 6],
              [7, np.nan, 9]])
print("axis=None", np.nansum(a), sep="\n")
print("axis=0", np.nansum(a, axis=0), sep="\n")
print("axis=1", np.nansum(a, axis=1), sep="\n")
axis=None
34.0
axis=0
[12.  7. 15.]
axis=1
[ 3. 15. 16.]

numpy.nanprod

NaN は 1 として、指定された軸方向に、配列の要素の総乗を計算します。

numpy.nanprod(a, axis=None, dtype=None, out=None, keepdims=<no value>)
引数
名前 デフォルト値
a array_like
入力配列。
axis {int, tuple of int, None} None
総乗を計算する軸の方向。axis=None の場合、入力配列のすべての要素の総乗を計算します。
dtype data-type None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
keepdims bool
True の場合、縮小される軸は、サイズ1として残されます。
返り値
名前 説明
nanprod 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [8]:
a = np.array([[1, 2, np.nan],
              [4, 5, 6],
              [7, np.nan, 9]])
print("axis=None", np.nanprod(a), sep="\n")
print("axis=0", np.nanprod(a, axis=0), sep="\n")
print("axis=1", np.nanprod(a, axis=1), sep="\n")
axis=None
15120.0
axis=0
[28. 10. 54.]
axis=1
[  2. 120.  63.]

numpy.nancumsum

NaN は 0 として、指定された軸方向に、配列の要素の累積和を計算します。

numpy.nancumsum(a, axis=None, dtype=None, out=None)
引数
名前 デフォルト値
a array_like
入力配列。
axis int None
累積和を計算する軸の方向。axis=None の場合、入力配列を1次元配列にして、累積和を計算します。
dtype dtype None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
返り値
名前 説明
nancumsum 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [9]:
a = np.array([[1, 2, np.nan],
              [4, 5, 6],
              [7, np.nan, 9]])
print("axis=None", np.nancumsum(a), sep="\n")
print("axis=0", np.nancumsum(a, axis=0), sep="\n")
print("axis=1", np.nancumsum(a, axis=1), sep="\n")
axis=None
[ 1.  3.  3.  7. 12. 18. 25. 25. 34.]
axis=0
[[ 1.  2.  0.]
 [ 5.  7.  6.]
 [12.  7. 15.]]
axis=1
[[ 1.  3.  3.]
 [ 4.  9. 15.]
 [ 7.  7. 16.]]

numpy.nancumprod

NaN は 1 として、指定された軸方向に、配列の要素の累積積を計算します

numpy.nancumprod(a, axis=None, dtype=None, out=None)
引数
名前 デフォルト値
a array_like
入力配列。
axis int None
累積積を計算する軸の方向。axis=None の場合、入力配列を1次元配列にして、累積積を計算します。
dtype dtype None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
返り値
名前 説明
nancumprod 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [10]:
a = np.array([[1, 2, np.nan],
              [4, 5, 6],
              [7, np.nan, 9]])
print("axis=None", np.nancumprod(a), sep="\n")
print("axis=0", np.nancumprod(a, axis=0), sep="\n")
print("axis=1", np.nancumprod(a, axis=1), sep="\n")
axis=None
[1.000e+00 2.000e+00 2.000e+00 8.000e+00 4.000e+01 2.400e+02 1.680e+03
 1.680e+03 1.512e+04]
axis=0
[[ 1.  2.  1.]
 [ 4. 10.  6.]
 [28. 10. 54.]]
axis=1
[[  1.   2.   2.]
 [  4.  20. 120.]
 [  7.   7.  63.]]

numpy.trace

対角成分の総和を計算します。

numpy.trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None)
引数
名前 デフォルト値
a array_like
入力配列。
offset int 0
対角線の位置。0 は主対角線を指し、正の値は上の対角線を指し、負の値は下の対角線を指します。
axis1, axis2 int
対角線を取る2次元の部分配列の第1軸と第2軸として使用される軸。デフォルトは、最初の2つの軸が使用されます。
dtype dtype None
返される配列の型。a.dtype が Python の整数型以上の精度であれば、a.dtype が使用されます。その場合、a.dtype が符号なしの場合は、Python の整数型と同じ精度の符号なし整数が使用されます。
out ndarray None
出力配列。期待される出力と同じ形状でなければなりませんが、出力の型は必要に応じてキャストされます。
返り値
名前 説明
sum_along_diagonals 出力配列。out を指定した場合は、その参照が返されます.

サンプルコード

In [11]:
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print(np.trace(a))
15

offset

引数 offset で対角線の位置を指定できます。

In [12]:
a = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print("offset=0", np.trace(a, offset=0), sep="\n")
print("offset=0", np.trace(a, offset=1), sep="\n")
print("offset=-1", np.trace(a, offset=-1), sep="\n")
offset=0
15
offset=0
8
offset=-1
12

コメント

コメントする

目次