NumPyには配列の要素の平均を求める関数numpy.average
とnumpy.mean
の2つの関数があります。
今回の記事では、
-
average
とmean
の違い
- 各々の関数の使い方
について解説します。
averageとmeanの違い
まずはこれら2つの関数の違いについて解説します。
一番大きな違いは、average
関数には重み付き(weighted)の平均を求められますが、mean
関数にはそのような機能がないことです。すなわち、重み付き平均を求めたい場合にはaverage
を使用します。
その他には、mean
関数では平均を計算する際のデータ型をdtype
で指定することができますが、average
関数では指定することができません。
以下の表に、average
関数でできることとmean
関数でできることの詳細をまとめました。
|
np.average |
np.mean |
重み付きの平均 |
◯ |
× |
データ型を指定 |
× |
◯ |
平均を計算する軸(axis)の方向を指定 |
◯ |
◯ |
軸(axis)の数を減らさない形で平均を返す |
× |
◯ |
np.average
np.average
関数から使い方を解説します。np.average
関数のAPIドキュメントは以下の通りです。
**np.average(a, axis = None, weights = None, returned = False, keepdims=)**
params:
パラメータ名 |
型 |
概要 |
a |
array_like (配列に相当するもの) |
平均を求めたい配列を指定します。 |
axis |
intもしくは intのタプル |
(省略可能)初期値None どの軸(axis)方向にそって平均を計算するかを指定します。デフォルトでは全ての要素についての平均を返します。 |
weights |
array_like |
(省略可能)初期値None 平均を求める際にそれぞれの要素につける重みを設定します。この割り当てられる値が大きいほどその要素の平均に対して及ぼす影響が大きくなります。 |
returned |
bool |
(省略可能)初期値”False” 値を返す際に、(平均, 重みの合計)といったタプルの形にするかどうかを指定します。 |
keepdims |
bool |
(省略可能)初期値no value。計算の結果、次元を縮小できる場合でも縮小可能な軸をサイズ1として維持します。 |
returns:
指定された方法で計算された平均の値が返されます。軸が指定されているときは配列の形で返され、returned=True
のときは(平均, 重みの合計)の形で値が返されます。
この関数は第1引数に、平均を求めたい配列を、第2引数に平均を求める軸の方向を、第3引数に重みを、第4引数に値の返し方を、第5引数に出力配列の次元数を入力配列と同じに維持するかどうかを指定します。
基本的な使い方
それぞれの引数を見ながら使い方を見て見ましょう。まずは、平均を求めたい配列だけを指定する場合から見ていきましょう。
軸の指定
次に軸(axis)を指定してみます。
重みの指定
次に重み(weights)を設定します。
重みの合計を表示
最後に、returned
について見ていきます。これは、値を返す際に重みの合計を表示するかどうかを指定できる引数です。
引数であるweights
に何も指定していないと、各要素の重みは1.0
として重みの合計が計算されます。
np.mean
次に、np.mean
関数について解説します。この関数は、np.average
関数に比べると重み付きなどは出来ないので、純粋に要素の平均を求めるために使用します。
np.average
関数に無い機能として一番大きいのは、平均を求める際に使うデータ型を指定できることです。
np.mean
関数のAPIドキュメントは以下のようになっています。
**numpy.mean(a, axis = None, dtype = None, out = None, keepdims = , ..., where=)**
params:
パラメータ名 |
型 |
概要 |
a |
array_like (arrayに相当するもの) |
平均を求めたい配列を指定します。 |
axis |
intもしくは intのタプル |
(省略可能)初期値None どの軸(axis)に沿って平均を求めるかを指定します。 |
dtype |
dtype |
(省略可能)初期値None 平均を求める際に使用するデータ型を指定します。 |
out |
ndarray |
(省略可能)初期値None 計算結果を格納するための配列を指定します。 |
keepdims |
bool (TrueまたはFalse) |
(省略可能)初期値”False” 返す配列の軸(axis)の数をそのままにする(その軸での要素数を1にする)かどうかを指定します。 |
where |
bool |
各要素を平均値の計算に含める要素かどうかの配列を指定します |
returns:
指定した配列の要素の平均、もしくは平均を要素とする配列が返されます。
1つ目の引数で平均を求めたい配列を指定します。次に、2つ目の引数axis
でどの軸(axis)に沿って平均を求めていくかを決め、3つ目の引数dtype
で計算する際に用いるデータ型を指定します。4つ目の引数out
で結果を格納する値を指定し、5つ目の引数keepdims
で結果の配列の軸(axis)の数をそのままにするかどうかを指定します。6つ目の引数where
で平均値の計算に含める要素を指定します。
やっている操作自体は純粋な要素の平均を求めているだけで、その結果をどう出力するかを引数で指定していくイメージです。
基本的な使い方
まずは、a
だけを指定した例から見ていきましょう。
軸を指定する
次に、軸(axis)を指定していきます。
データ型の指定
次はdtype
を指定していきます。これによって計算の精度が変わってきます。
引数のout
についてですが、これはほとんど使用しません。メモリを使い回したいときに指定してください。
配列の次元数を落とさずに結果を求める
最後に、keepdims
について解説します。keepdims
にTrue
を設定すると、軸の数を減らしません。次の例のように返された配列のshape
を見れば、どのような変化をするか分かりやすいです。