NumPy配列の行・列ごとの合計、平均、最大、最小などを算出
NumPy配列ndarrayの合計や平均、最大値・最小値を求めるには、それぞれ、np.sum(), np.mean(), np.max(), np.min()を使う。
これらの関数では引数axisを指定することで、行ごとや列ごとの結果が得られる。デフォルトはaxis=Noneでndarray全体の合計や平均が算出される。
また、これらの関数はndarrayのメソッドとしても提供されている。
本記事では主に二次元配列を対象とする。三次元以上の多次元配列における引数axisや引数keepdimsについての詳細は以下の記事を参照。
欠損値NaNを含むndarrayに対する合計や平均などの算出については以下の記事を参照。
本記事のサンプルコードのNumPyのバージョンは以下の通り。バージョンによって仕様が異なる可能性があるので注意。
import numpy as np
print(np.__version__)
# 1.26.1
numpy.sum(): 合計
配列ndarrayの合計を算出するにはnp.sum()を使う。
np.sum()に配列ndarrayを渡すと、すべての要素の合計値が返される。
a = np.arange(12).reshape(3, 4)
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(np.sum(a))
# 66
引数axis=0とすると列ごとの合計値、axis=1とすると行ごとの合計値が返される。
print(np.sum(a, axis=0))
# [12 15 18 21]
print(np.sum(a, axis=1))
# [ 6 22 38]
axisは負の値で後ろから指定することも可能。二次元配列の場合、axis=-1はaxis=1、axis=-2はaxis=0と同じ。
print(np.sum(a, axis=-1))
# [ 6 22 38]
print(np.sum(a, axis=-2))
# [12 15 18 21]
存在しない軸を指定するとエラーになる。
# print(np.sum(a, axis=2))
# AxisError: axis 2 is out of bounds for array of dimension 2
# print(np.sum(a, axis=-3))
# AxisError: axis -3 is out of bounds for array of dimension 2
関数np.sum()ではなく、ndarrayのメソッドsum()も用意されている。np.sum()と同様に引数axisを指定できる。
print(a.sum())
# 66
print(a.sum(axis=0))
# [12 15 18 21]
print(a.sum(axis=1))
# [ 6 22 38]
numpy.mean(): 平均
配列ndarrayの平均を算出するにはnp.mean()を使う。
np.sum()と同様、デフォルトは配列全体の平均値、引数axisを指定すると、列ごと・行ごとの平均値が返される。
a = np.arange(12).reshape(3, 4)
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(np.mean(a))
# 5.5
print(np.mean(a, axis=0))
# [4. 5. 6. 7.]
print(np.mean(a, axis=1))
# [1.5 5.5 9.5]
sum()と同じくmean()もndarrayのメソッドとして呼び出すことができる。
print(a.mean())
# 5.5
print(a.mean(axis=0))
# [4. 5. 6. 7.]
print(a.mean(axis=1))
# [1.5 5.5 9.5]
numpy.max(), min(): 最大値、最小値
配列ndarrayの最大値・最小値を算出するにはnp.max(), np.min()を使う。
np.sum()と同様、デフォルトは配列全体の最大値・最小値、引数axisを指定すると、列ごと・行ごとの最大値・最小値が返される。
a = np.arange(12).reshape(3, 4)
print(a)
# [[ 0 1 2 3]
# [ 4 5 6 7]
# [ 8 9 10 11]]
print(np.max(a))
# 11
print(np.max(a, axis=0))
# [ 8 9 10 11]
print(np.max(a, axis=1))
# [ 3 7 11]
print(np.min(a))
# 0
print(np.min(a, axis=0))
# [0 1 2 3]
print(np.min(a, axis=1))
# [0 4 8]
np.max()とnp.min()のエイリアスとしてnp.amax()とnp.amin()も定義されている。例は省略するが、使い方は同じ。
max(), min()もndarrayのメソッドとして呼び出すことができる。
print(a.max())
# 11
print(a.max(axis=0))
# [ 8 9 10 11]
print(a.max(axis=1))
# [ 3 7 11]
print(a.min())
# 0
print(a.min(axis=0))
# [0 1 2 3]
print(a.min(axis=1))
# [0 4 8]
最小値や最大値のインデックス(位置)を取得したい場合はnp.argmin(), np.argmax()を使う。以下の記事を参照。
そのほか(標準偏差numpy.std(), 分散numpy.var()など)
ほかにも、標準偏差を求めるnp.std()や分散を求めるnp.var()などの関数が提供されている。いずれの関数においても引数axisを設定できるようになっており、行ごと、列ごとの結果を簡単に得られる。
そのほかの関数やndarrayのメソッドについては公式ドキュメントを参照。