1次元配列の場合
平均
平均はmean()
メソッドで計算。
1 2 3 4 5 6 7 8 9 10 |
import numpy as np x = np.array([1, 1, 2, 3, 5, 8, 13, 21, 34, 55]) n = x.size s = x.sum() m = x.mean() print(m, s / n) # 14.3 14.3 |
分散・標準偏差
標本分散・標本標準偏差
分散はvar()
メソッド、標準偏差はstd()
メソッドで計算。デフォルトでは標本分散と標本標準偏差。
1 2 3 4 5 6 7 8 |
v = x.var() sv = x.std() print(v, np.sum((x - m)**2) / n) # 285.01000000000005 285.01000000000005 print(sv, np.sqrt(v)) # 16.88223918797504 16.88223918797504 |
不偏推定量
分散の算出では、引数ddof
(delta degrees of freedom)で指定した引数をデータ数nから引いた数で偏差の二乗和を割る。デフォルトではddof=0
なので標本分散、標本標準偏差になるが、ddof=1
を指定すると、不偏分散、標準偏差の不偏推定量が計算される。
1 2 3 4 5 6 7 8 |
u = x.var(ddof=1) su = x.std(ddof=1) print(u, np.sum((x - m)**2) / (n - 1)) # 316.6777777777778 316.6777777777778 print(su, np.sqrt(u)) # 17.795442612584207 17.795442612584207 |
2次元配列の場合
平均
平均はmean()
メソッドで計算。引数axis=0/1で列方向/行方向の計算方向を指定。計算結果は1次元配列で、要素数は列方向の平均なら行数、行方向の平均なら列数と同じになる。
1 2 3 4 5 6 7 8 |
X = np.array([1, 1, 2, 3, 5, 8, 13, 21, 34, 55]).reshape(-1, 2) n = X.shape[0] s = X.sum(axis=0) m = X.mean(axis=0) print(m, s / n) # [11. 17.6] [11. 17.6] |
分散・標準偏差
標本分散・標本標準偏差
分散はvar()
メソッド、標準偏差はstd()
メソッドで計算。デフォルトでは標本分散、標本標準偏差を計算。デフォルトでは標本分散、標本標準偏差。
1 2 3 4 |
v = X.var(axis=0) print(v, np.sum((X - m)**2, axis=0) / n) # [150. 398.24] [150. 398.24] |
不偏推定量
引数ddof=1
を指定すると、データ数nからddof=1を引いた数で偏差の二乗和が割られ、不偏分散、標準偏差の不偏推定量が計算される。
1 2 3 4 |
u = X.var(axis=0, ddof=1) print(u, np.sum((X - m)**2, axis=0) / (n - 1)) # [187.5 497.8] [187.5 497.8] |
共分散
cov()
メソッドで二つのデータの共分散行列を計算する。結果は2次元配列で得られ、対角要素は各データの分散、対角要素以外の要素は行数・列数に対応する共分散。
デフォルトでは引数bias=False
となっていて、偏差の積和をn−1で割った不偏推定量が計算される。
1 2 3 4 5 6 7 |
print(np.cov(X[:, 0], X[:, 1])) # [[187.5 305.5] # [305.5 497.8]] Xd = X - m print(np.sum(Xd[:, 0] * Xd[:, 1]) / (n - 1)) # 305.5 |
bias=True
を指定すると、偏差の積和を割る数がnとなり、標本に対する分散・共分散が計算される。
1 2 3 4 5 6 |
print(np.cov(X[:, 0], X[:, 1], bias=True)) # [[150. 244.4 ] # [244.4 398.24]] print(np.sum(Xd[:, 0] * Xd[:, 1]) / n) # 244.4 |