AI資格ドリル
資格を選ぶ

用語比較

np.meanとnp.averageの違い|重みを付けられるのはどちらか(Python3データ分析)

np.mean は算術平均を返し、np.average は重み(weights)を付けた加重平均を返します。重みを付けたいなら average、付けないなら mean でも average でも同じと覚えると、取り違えません。

average は avg = sum(a * weights) / sum(weights) で計算し、weights を指定しなければ全データの重みを1として扱います。

この記事の根拠と出典

各セクションの見出しの下に、公式資料で確認した内容か編集部の整理かをラベルで示しています。 試験日・料金・申込条件・試験方式は変わることがあるため、申込前に公式サイトで確認してください。

np.meanとnp.averageの要点

np.mean

指定した軸に沿った算術平均を返す。要素の和を要素数で割る。weights 引数は無い。整数の入力では、float64 で計算した値を返す。

np.average

指定した軸に沿った加重平均を返す。weights を渡すと sum(a * weights) / sum(weights) を計算する。weights を省くと、全データの重みが1の平均になる。

違いを表で確認

比較軸np.meannp.average
重み(weights)引数が無い。すべての要素を同じ重みで扱うweights で、要素ごとの重みを渡せる。省くと重みはすべて1
計算式要素の和を要素数で割るsum(a * weights) / sum(weights)
戻り値の追加情報平均の値だけを返すreturned=True にすると、(平均, 重みの合計) のタプルを返す。weights が None のときの重みの合計は、平均をとった要素の数に等しい
エラーが出る条件weights が無いので、重みに由来するエラーは起きない軸に沿った重みがすべて0のとき ZeroDivisionError。axis=None で weights の形が a と違うと TypeError

Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)

PR

ほかの資格を含む参考書・問題集の一覧を見る

どこで迷っているかを切り分ける

01

ふつうの平均がほしい人

mean を使います。公式の例では、a = [[1, 2], [3, 4]] の np.mean(a) は 2.5、axis=0 なら array([2., 3.])、axis=1 なら array([1.5, 3.5]) です。

02

データごとに重みが違う平均がほしい人

average を使います。公式の例では、np.average(np.arange(1, 11), weights=np.arange(10, 0, -1)) が 4.0 になります。

03

weights を省いたとき、mean と答えが同じか知りたい人

公式の例の np.average(np.arange(1, 5)) は 2.5 です。weights を省くと全データの重みが1なので、算術平均と同じ値になります。

具体例で使い分ける

例 1

average で重みを付けて平均を求める

公式の例の np.average(np.arange(1, 11), weights=np.arange(10, 0, -1)) を見ます。

  • データは 1 から 10、重みは 10 から 1 まで小さくなります。
  • 和 sum(a * weights) は 220、重みの合計 sum(weights) は 55 です。
  • 220 ÷ 55 で、結果は 4.0 です。重みの大きい小さな値に引き寄せられ、ふつうの平均 5.5 より小さくなります。

結論: weights を渡すと、重みの大きいデータほど平均への影響が大きくなります。

例 2

軸に沿って重みを付ける

公式の例の、data = np.arange(6).reshape((3, 2)) を見ます。

  • data は [[0, 1], [2, 3], [4, 5]] の3行2列です。
  • np.average(data, axis=1, weights=[1./4, 3./4]) は、各行の2つの値に 1/4 と 3/4 の重みを付けます。
  • 結果は array([0.75, 2.75, 4.75]) で、たとえば1行目は 0×0.25 + 1×0.75 = 0.75 です。

結論: axis を指定するときの weights は、その軸に沿った長さで渡します。

例 3

重みの合計が 0 のとき

軸に沿った重みがすべて 0 の場合を考えます。

  • average の計算は sum(a * weights) / sum(weights) なので、分母が 0 になります。
  • 公式は、このとき ZeroDivisionError が出ると書いています。
  • 公式は、weights の値に課す条件は、sum(weights) が 0 でないことだけだと説明しています。

結論: weights の合計が 0 だと計算できません。合計が 0 でなければ、重みが 1 に正規化されている必要はありません。

問題文から答えを選ぶ手順

  1. 1

    重みを付けたいかを決める

    データごとに重みを付けるなら average、付けないなら mean か weights を省いた average です。

  2. 2

    weights の形を確かめる

    axis を指定しないなら、weights は a と同じ形です。axis を指定するなら、その軸に沿った形に合わせます。

  3. 3

    重みの合計を確かめる

    sum(weights) が 0 だと ZeroDivisionError になります。合計が 0 でなければ使えます。

試験での見分け方

  • 1重みを付けない算術平均には mean を使う。
  • 2重みを付けた平均には average に weights を渡す。
  • 3average は weights を省くと、全データの重みが1の平均になる。
  • 4weights の合計が 0 だと、average は ZeroDivisionError になる。

誤答しやすい選択肢

mean にも weights を渡せると考える

修正: mean の引数には weights がありません。重みを付けた平均は average で求めます。

weights の合計を 1 にしないといけないと考える

修正: 公式は、weights の値に課す条件は sum(weights) が 0 でないことだけだと書いています。計算は sum(weights) で割るので、合計が 1 でなくても使えます。

average の戻り値はいつも平均だけだと考える

修正: returned=True にすると、(平均, 重みの合計) のタプルを返します。

確認問題

Q1重みを付けた平均を求められるのは、meanとaverageのどちらか?

答え: average

average は weights を受け取り、sum(a * weights) / sum(weights) を計算します。mean には weights がありません。

Q2np.average(np.arange(1, 5)) の結果は?

答え: 2.5

weights を省くと全データの重みが1です。1, 2, 3, 4 の算術平均は 2.5 です。

Q3np.average(np.arange(1, 11), weights=np.arange(10, 0, -1)) の結果は?

答え: 4.0

sum(a * weights) が 220、sum(weights) が 55 で、220 ÷ 55 = 4.0 です。

Q4軸に沿った weights がすべて 0 のとき、np.average はどうなるか?

答え: ZeroDivisionError になる

sum(weights) が分母になるためです。

到達チェック

  • meanとaverageの違いが weights の有無だと説明できる
  • 加重平均の計算式を書ける
  • weights の合計が 0 のときの動きを言える
  • returned=True の戻り値を答えられる

同じ資格で次に知りたいこと

よくある質問

Qnp.meanとnp.averageの違いは?

A

mean は算術平均を返します。average は weights を渡すと加重平均を返し、省くと全データの重みを1として平均します。

Qweights を省くと mean と同じ結果ですか?

A

公式の例では np.average(np.arange(1, 5)) が 2.5 で、算術平均と同じ値です。

Q加重平均の式は?

A

公式のリファレンスでは avg = sum(a * weights) / sum(weights) です。

Qデータ分析試験の範囲?

A

本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。

次に見る比較

執筆: AI資格ドリル編集部(運営者情報を見る)