NumPyで配列の値を集約するための集約関数の使い方を紹介します。
Contents
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の方が高速に計算できると覚えておきましょう。
平均(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に従うようなデータを用意して各種関数を使用しています。各種統計値も用意した正規分布を表すような数値となっていることが分かります。
最大(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
要素の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の判定がされているということが分かるかと思います。
上記で紹介しているソースコードについてはgithubにて公開しています。参考にしていただければと思います。