スポンサーリンク

Pythonで分散、標準偏差、不偏分散、不偏分散の平方根を算出する【Numpy、SciPy】

Numpy

Pythonで分散、分散、標準偏差、不偏分散、不偏分散の平方根を算出するには、Numpyのnumpy.varnumpy.stdを用いる。また、SciPyのscipy.stats.tvarscipy.stats.tstdを用いることでも不偏分散、不偏分散の平方根を算出できる。

numpy.var、numpy.std、scipy.stats.tvar、scipy.stats.tstdの使い方

2次元のndarray配列を生成し確認する。

import numpy as np


a = np.array([[6, 8, 3, 0],
              [3, 2, 1, 7],
              [8, 1, 8, 4],
              [5, 3, 0, 5],
              [4, 7, 5, 9]])
print(a.shape)
# (5, 4)

分散の算出方法

numpy.varの引数に配列を指定すると、すべての要素を使い分散が算出される。引数axisを指定すると、指定した軸に沿って分散が算出される。

print(np.var(a))
# 7.547500000000001

print(np.var(a, axis=0))
# [2.96 7.76 8.24 9.2 ]
print(np.var(a, axis=1))
# [9.1875 5.1875 8.6875 4.1875 3.6875]

不偏分散の算出方法

numpy.varに配列を指定し、引数ddofに1を指定することで、不偏分散が算出される。またscipy.stats.tvarの引数に配列を指定するとことでも算出できる。軸に沿って算出したい場合は、引数axisを指定する。

print(np.var(a, ddof=1))
# 7.944736842105264

from scipy import stats
print(stats.tvar(a, axis=None))
# 7.944736842105264


print(np.var(a, ddof=1, axis=1))
# [12.25        6.91666667 11.58333333  5.58333333  4.91666667]

print(stats.tvar(a, axis=1))
# [12.25        6.91666667 11.58333333  5.58333333  4.91666667]

標準偏差の算出方法

分散と同様の使い方で、numpy.stdの引数に配列を指定し、軸に沿って計算したい場合は、引数axisを指定する。

print(np.std(a))
# 2.747271373563231

print(np.std(a, axis=0))
# [1.72046505 2.78567766 2.87054002 3.03315018]

print(np.std(a, axis=1))
# [3.03108891 2.27760839 2.94745653 2.04633819 1.92028644]

不偏分散の平方根の算出方法

np.stdの引数ddofに1を指定することで、不偏分散の平方根の算出できる。またstats.tstdの引数に配列を指定することで同様に算出できる。

print(np.std(a, ddof=1))
# 2.8186409565791215

print(stats.tstd(a, axis=None))
# 2.8186409565791215


print(np.std(a, ddof=1, axis=1))
# [3.5        2.62995564 3.40342964 2.36290781 2.21735578]

print(stats.tstd(a, axis=1))
# [3.5        2.62995564 3.40342964 2.36290781 2.21735578]

関連記事、参考資料

コメント