用語比較
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.mean | np.average |
|---|---|---|
| 重み(weights) | 引数が無い。すべての要素を同じ重みで扱う | weights で、要素ごとの重みを渡せる。省くと重みはすべて1 |
| 計算式 | 要素の和を要素数で割る | sum(a * weights) / sum(weights) |
| 戻り値の追加情報 | 平均の値だけを返す | returned=True にすると、(平均, 重みの合計) のタプルを返す。weights が None のときの重みの合計は、平均をとった要素の数に等しい |
| エラーが出る条件 | weights が無いので、重みに由来するエラーは起きない | 軸に沿った重みがすべて0のとき ZeroDivisionError。axis=None で weights の形が a と違うと TypeError |
Python3エンジニア認定データ分析試験の学習に使う書籍(Amazon)
PRどこで迷っているかを切り分ける
ふつうの平均がほしい人
mean を使います。公式の例では、a = [[1, 2], [3, 4]] の np.mean(a) は 2.5、axis=0 なら array([2., 3.])、axis=1 なら array([1.5, 3.5]) です。
データごとに重みが違う平均がほしい人
average を使います。公式の例では、np.average(np.arange(1, 11), weights=np.arange(10, 0, -1)) が 4.0 になります。
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
重みを付けたいかを決める
データごとに重みを付けるなら average、付けないなら mean か weights を省いた average です。
- 2
weights の形を確かめる
axis を指定しないなら、weights は a と同じ形です。axis を指定するなら、その軸に沿った形に合わせます。
- 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 の戻り値を答えられる
関連ページで確認する
同じ資格で次に知りたいこと
- np.stdとpandasのstdの違い|ddofの既定値は0と1(Python3データ分析)
NumPyのnp.stdとpandasのSeries.std・DataFrame.stdで、同じデータなのに標準偏差が違って見える理由を、ddofの既定値(NumPyは0、pandasは1)で整理します。pandas公式の例のpd.Series([1, 2, 3])が1.0と0.816496580927726になる計算つきです。
- np.linalg.invとnp.linalg.solveの違い|逆行列を返すか、連立方程式の解を返すか(Python3データ分析)
NumPyのnp.linalg.inv(逆行列)とnp.linalg.solve(連立方程式の解)の違いを、渡す引数、戻り値、LinAlgErrorが出る条件で整理します。NumPy公式リファレンスの例で照合した、x0+2x1=1の計算例と確認問題つき。
- np.concatenateとnp.stackの違い|既存の軸につなぐか、新しい軸を作るか(Python3データ分析)
NumPyのnp.concatenate(既存の軸に沿って結合)とnp.stack(新しい軸に沿って結合)の違いを、結果の次元数、入力の形の条件、axis引数の意味で整理します。NumPy公式リファレンスの例のnp.stack((a, b))が2行3列になる計算つきです。
よくある質問
Qnp.meanとnp.averageの違いは?
mean は算術平均を返します。average は weights を渡すと加重平均を返し、省くと全データの重みを1として平均します。
Qweights を省くと mean と同じ結果ですか?
公式の例では np.average(np.arange(1, 5)) が 2.5 で、算術平均と同じ値です。
Q加重平均の式は?
公式のリファレンスでは avg = sum(a * weights) / sum(weights) です。
Qデータ分析試験の範囲?
本サイトの第3章 NumPy で扱います。出題の形式や範囲は、受験前に公式の案内で確認してください。
次に見る比較
- G検定・DS検定・統計検定2級で重なる用語10語の比較
同じ名前の用語の定義と収録章を、資格ごとに並べます。
- ベイズの定理と条件付き確率の違い(統計検定2級の式と計算例)
求める確率の向きの違いと、陽性になる確率の計算例を確かめます。
- 紛らわしい用語ペア早見表
混同しやすい用語の違いと判定の手掛かりを、資格別の一覧で確かめます。
執筆: AI資格ドリル編集部(運営者情報を見る)
