NumPy

【NumPy】集約関数を用いた計算 ~ sum, prod, mean, median, std, var, max, min, argmax, argmin, any, all ~

【NumPy】集約関数を用いた計算 _ sum, prod, mean, median, std, var, max, min, argmax, argmin, any, all _

NumPyで配列の値を集約するための集約関数の使い方を紹介します。

NumPyの集約関数

NumPyには、対象となる配列(ndarray)の値を集約する関数が色々と存在します。集約とは、例えば総和(sum)のように配列のすべての値を足し算するといった計算等があります。本記事では、NumPyの集約関数を簡単な例を用いて紹介します。

総和(np.sum)と総乗(np.prod)

対象とする配列のすべての足し算である総和を計算する場合にはnp.sum関数を使用します。また、すべての掛け算である総乗を計算する場合にはnp.prod関数を使用します。

数学でよく出てくるΣがnp.sumで、Πがnp.prodということになります。

集約関数名概要説明
np.sum要素の総和を計算する
np.prod要素の総乗を計算する

以下で簡単な使い方を見てみましょう。

import numpy as np

# データの用意
data = np.arange(1, 6)

print(f'総和:{np.sum(data)}')
print(f'総乗:{np.prod(data)}')
【実行結果】
総和:15
総乗:120

なお、総和についてはbuilt-inのsum関数を使うことで同様のことができますが、np.sumの方が高速に計算できると覚えておきましょう。

Note

公式ドキュメントの記載は以下を参考にしてください。

np.sum→こちら
np.prod→こちら

平均(np.mean)、中央値(np.median)、標準偏差(np.std)、分散(np.var)

与えられたデータに対して統計情報を集計する際に必ずと言ってよいほど出てくるのが平均、中央値、標準偏差、分散です。

これらの統計値を計算をする場合には、以下の表に示した各種関数(np.mean関数, np.median関数, np.std関数, np.var関数)を使用します。

集約関数名概要説明
np.mean平均値を計算する
np.median中央値を計算する
np.std標準偏差を計算する
np.var分散を計算する

以下で簡単な使い方を見てみましょう。

import numpy as np

# 平均5, 標準偏差2の正規分布に従うデータを用意
data = 5 + np.random.randn(1000) * 2

print(f'平均値:{np.mean(data)}')
print(f'中央値:{np.median(data)}')
print(f'標準偏差:{np.std(data)}')
print(f'分散:{np.var(data)}')
【実行結果】
平均値:4.90977916728299
中央値:4.967198810815537
標準偏差:1.9894080825021963
分散:3.957744518725065

※randomを使用しているため、実行結果は実行のたびに異なります。

この例では、平均5、標準偏差2に従うようなデータを用意して各種関数を使用しています。各種統計値も用意した正規分布を表すような数値となっていることが分かります。

Note

公式ドキュメントの記載は以下を参考にしてください。

np.mean→こちら
np.median→こちら
np.std→こちら
np.var→こちら

最大(np.max)、最小(np.min)、最大要素位置(np.argmax)、最小要素位置(np.argmin)

配列の中に存在する要素の最大値、最小値を求める場合は、np.max関数、np.min関数を用います。また、最大や最小となる要素位置を求める場合には、np.argmax関数、np.argmin関数を用います。

集約関数名概要説明
np.max最大値を求める
np.min最小値を求める
np.argmax最大となる要素位置を求める
np.argmin最小となる要素位置を求める

以下で簡単な使い方を見てみましょう。

import numpy as np

# データの用意
data = np.arange(1, 6)

print(f'最大:{np.max(data)}')
print(f'最小:{np.min(data)}')
print(f'最大要素位置:{np.argmax(data)}')
print(f'最小要素位置:{np.argmin(data)}')
【実行結果】
最大:5
最小:1
最大要素位置:4
最小要素位置:0
Note

公式ドキュメントの記載は以下を参考にしてください。

np.max→こちら
np.min→こちら
np.argmax→こちら
np.argmin→こちら

要素のTrue判定 (np.any、np.all)

配列の要素の値のいずれかがTrueの場合を判定する場合には、np.any関数を使用します。また、要素の値の全てがTrueの場合を判定する場合には、np.all関数を使用します。

集約関数名概要説明
np.anyいずれかの要素がTrueの場合にTrueを返却する
np.allすべての要素がTrueの場合にTrueを返却する

いかだ簡単な使い方を見てみましょう。

import numpy as np

data1 = np.array([True, True, False])
data2 = np.array([True, True, True])
data3 = np.array([0, 1, 2])
data4 = np.array([1, 2, 3])

print('--- data1')
print(np.any(data1))
print(np.all(data1))
print('--- data2')
print(np.any(data2))
print(np.all(data2))
print('--- data3')
print(np.any(data3))
print(np.all(data3))
print('--- data4')
print(np.any(data4))
print(np.all(data4))
【実行結果】
--- data1
True
False
--- data2
True
True
--- data3
True
False
--- data4
True
True

True, Falseで構成される配列と数値の配列を例で挙げてみました。

anyやallは、配列に0に該当するものが含まれるかどうかにより判定をしているため、数値の場合でも0が含まれるか否かでTrue/Falseの判定がされているということが分かるかと思います。

Note

公式ドキュメントの記載は以下を参考にしてください。

np.any→こちら
np.all→こちら