Python

【Python】で調和平均と絶対平均計算

投稿日:2019年6月9日 更新日:

目的

前回、一般的に平均として使われる算術平均に加え、○○率の平均などの計算に向いている幾何平均の定義と計算方法について勉強しました。
今回は、さらにそれ以外の平均の考え方である調和平均と絶対平均についてもコードを書きながら勉強したいと思います。

調和平均

A君とB君がいます。距離\(2L\)[km]を二人で均等に分けて走ることにし、A君が\(L\)[km]、B君も\(L\)[km]走ることにしたとします。
ただし、A君とB君の走る速さは違うものとします。
つまり、A君は時速\(a\)[km]、B君は時刻\(b\)[km]で走ります。
この時、二人の走る速さの平均はいくつになるか?

このような問題を考えるときに調和平均という考え方を使います。

が、まずは普通の平均である単純な算術平均を使った場合の計算を考えてみます。以下で計算できるかと思います。

$$\frac{a+b}{2}$$


しかし、これは正しいでしょうか・・・?

結論からいうと正しいとは言えません。
理由は別の考え方をしてみると分かります。

A君が\(L\)[km]走るのにかかる時間は\(L/a\)[h]、B君が\(L\)[km]走るのにかかる時間は\(L/b\)[h]になります。そのため、二人で\(2L\)[km]走るのにかかる時間は

$$\frac{L}{a}+ \frac{L}{b}$$

ということになります。そして、二人で走った距離の合計は\(2L\)[km]です。そのため、平均速さを計算すると以下になるはずです。

$$ 2L \div\left(\frac{L}{a}+ \frac{L}{b }\right) = \frac{1}{\frac{1}{2}(\frac{1}{a}+\frac{1}{b})}$$

上記からわかるように、平均速度は二人の走る速度の逆数の平均のさらに逆数をとったものになります。
このような考え方で計算された平均を調和平均と呼びます
そして、これは算術平均の計算式と異なることになります。


では両者の考え方の違いとは何でしょうか。

算術平均ではA君の速さ\(a\)とB君の速さ\(b\)を足して2で割っています。これは言うなれば、速さ\(\frac{a+b}{2}\)という速さのC君を新たに定義して、C君に\(2L\)を走らせるというような考え方になります。

一方調和平均の計算はA君とB君の所要時間をそれぞれ計算し、距離÷時間という速さの基本式によって算出する考え方です。


平均速さを知りたい、という場合に上記の2つのうちどちらの考え方の答えを知りたいか、というと後者の考え方で導かれた答えのほうが自然かと思います。
これが調和平均の用途です。

では実際にpythonで計算してみます。
上記の例で、A君時速7[km]、B君時速10[km]とした際の速さの平均について、算術平均と調和平均をそれぞれ求めます。コードとしては以下のような形で記述しました。

import numpy as np
from scipy import stats

print('算術平均:',np.mean([[7, 10]])) #算術平均: 8.5
print('調和平均:',stats.hmean([7, 10])) #調和平均: 8.23529411764706

この例では算術平均より調和平均のほうが少し小さい値になりました。

絶対平均

絶対平均は単純です。算術平均のように足し算して数で割るのですが、足しこむ値に絶対値を使うのが絶対平均です。
用途としては、誤差を平均するような場合です。算術平均だと誤差の符号の正負で値が打ち消し合ってしまう場合がありますので、絶対平均を使う場合が多いかと思います。

pythonだと次のようなコードで計算できます。

import numpy as np

x = np.array([-3,2,3,4,6,5,9,4])
abs_m = abs(x).mean()
m = x.mean()
print('絶対平均:',abs_m) #絶対平均: 4.5
print('算術平均:',m) #算術平均: 3.75

また、pythonによる計算方法として、直接的に絶対値を計算するのではなく、二乗平方根の平均値として計算することもできます。
この二乗平方根の平均値はRMSと呼ばれます。

RMS = np.sqrt(x*x).mean()
print('RMS:',RMS) #RMS: 4.5

-Python

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

【Python】WindowsでPython+JupyterLab環境の構築

Contents1 概要2 環境3 Step1 : Pythonのインストール4 Step2 : 仮想環境(venv)の構築5 Step3 : JupyterLabの構築 概要 PythonとJupy …

CentOSからAnacondaアンインストール

Contents1 目的2 Step1 : .pyenvの削除3 Step2 : bash_profileのpathの削除4 Step3 : .condaの削除5 Step4 : 確認 目的 以下の記 …

【Python】階乗と順列と組合せ

Contents1 目的2 階乗の計算方法3 順列の計算4 組合せの計算5 まとめ 目的 統計的なデータ分析アプローチの中には確率的な考え方も多く使われます。今回は確率的な手法を用いる際に必要となる基 …

【Python】PaSoRiでカードを読み取ったら音を鳴らす

Contents1 目的2 音源3 音を鳴らすためのライブラリ4 コード5 結論 目的 前回、PaSoRiの上にICカードを置いた状態からカードの中の情報を読み取る、というものをPythonで試しまし …

【Python】単回帰の計算と表示

Contents1 目的2 回帰の式3 単回帰とは?4 最小二乗法5 pythonによる実装6 注意点 目的 ある得られたデータをもとに、今後発生するデータが何かを予測したいという場合があります。例え …

言語切り替え

カテゴリー