【NumPy入門】加重平均(重み付き平均)も計算できるnp.average!

こんにちは!インストラクターのフクロウです!

NumPyで平均を求める関数といえばnp.meanですが、これとは別にnp.averageという関数も用意されています。

np.averageはnp.meanと同じ単純平均を計算するだけでなく、加重平均についても計算することができます。

この記事では、np.averageの使い方について、簡単な算数の例を見ながら解説していきますよ!

目次

np.averageとは

np.averageとは

  • 単純平均
  • 加重平均

の両方が計算できる関数です。(これらを忘れてしまった!という方は次の章も読んでください!)

パラメータを見てみましょう。

np.average(
    a= array_like_object,        # 平均を出したい配列
    axis=None,                   # 軸を指定 
    weights=array_like_object,   # 重み配列
    returned = False             # 重みの合計を返すかどうか
)

この中で必ず必要なのは、第一引数だけです。(他のパラメータはオプショナルです。)

axisは他のNumPy関数と同様の使い方ですね。

weightsは加重平均を出したいときに使います。第一引数と同じ形状の配列を渡します。

単純平均と加重平均

単純平均と加重平均、覚えていますか?

単純平均

単純平均は普通の平均ですね。

X = [x_1, …, x_i, …, x_N]の平均を計算するなら、以下のような式になります。

加重平均

これに対して加重平均とは、「重み付き平均」です。

先程のXだけでなく、Xの重みとしてW = [w_1, …, w_i, …, w_N]があって、重みを考慮した平均を計算します。

これらの考え方については、以下のサイトが非常にわかりやすくておすすめです。

具体例で学ぶ数学 - 算数から高度...
加重平均(重みつき平均)の例と意味 - 具体例で学ぶ数学 それぞれの重要度を加味した平均を加重平均(重み付き平均)と言う。 加重平均を使う例(二つの場合) 二つの数字

これ以降は、「具体例で学ぶ数学」様の例題に沿ってサンプルコードを解説します。

np.averageの使い方

ここからは、先程の参考サイトの例題をnp.averageで試してみます。

import numpy as np

加重平均を使う例(2つの場合)

np.averageで加重平均を計算してみましょう。

平均を取りたい配列と、重みの配列を指定することで計算できますよ!

>>> x = np.array([70,90])
>>> w = np.array([20,30])

>>> # 単純平均
>>> np.average(x)

80.0

>>> # 単純平均はnp.meanでも計算可
>>> np.mean(x)

80.0

>>> # 加重平均
>>> np.average(x, weights=w)

82.0

加重平均を使う例(3つ以上の場合)

平均を計算したい配列の要素は何個でもOKです。

>>> prices = [200,100,60]
>>> num_items = [10, 5, 20]

>>> # 単純平均
>>> np.average(prices)

120.0

>>> # 加重平均
>>> np.average(prices, weights=num_items)

105.71428571428571

まとめ

この記事では加重平均を計算できるnp.average関数を解説しました。

「加重平均」という単語、覚えていましたか?

加重平均に限らず、小学校〜大学で習った算数・数学の問題はNumPyで実装してみると面白いですよ!

人工知能や機械学習にチャレンジする前に、必要な数学的操作をNumPyで試して見てください。

新しい発見があって勉強が楽しくなるかも、ですよ!

この記事を書いた人

【プロフィール】
DX認定取得事業者に選定されている株式会社SAMURAIのマーケティング・コミュニケーション部が運営。「質の高いIT教育を、すべての人に」をミッションに、IT・プログラミングを学び始めた初学者の方に向け記事を執筆。
累計指導者数4万5,000名以上のプログラミングスクール「侍エンジニア」、累計登録者数1万8,000人以上のオンライン学習サービス「侍テラコヤ」で扱う教材開発のノウハウ、2013年の創業から運営で得た知見に基づき、記事の執筆だけでなく編集・監修も担当しています。
【専門分野】
IT/Web開発/AI・ロボット開発/インフラ開発/ゲーム開発/AI/Webデザイン

目次