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
のメソッドについては公式ドキュメントを参照。