平均 分散 標準偏差

基本統計量を計算する Haskell のプログラムを見つけられなかったので。

n xs = fromIntegral(length xs)
m xs = sum xs / n xs
ss xs = sum [(x - m xs)*(x - m xs)| x <- xs] / (n xs - 1)
stat xs = [n xs, sum xs, m xs, ss xs, sqrt $ ss xs]

実行例
Main> stat [1,2,3]
[3.0,6.0,2.0,1.0,1.0]

出力は、[標本数、総和、平均、分散、標準偏差]

[(x - m xs)*(x - m xs)| x <- xs] は見慣れない表記だが、リストを要素の集合と見なすと、集合の内包的定義とほぼ同じ意味になる。上の例で言うと、集合(リスト) xs の要素を取り出し、(x-m) * (x-m) を計算した要素を集めた集合(リスト)という意味になる。

<- という記号は∈を模したもの。

使い出のある表記法で、次のようなものは、集合(リスト) [1,2,3] と集合(リスト) [4,5,6] の要素のすべての組み合わせのタプルを要素とする集合(リスト)を作ってくれる。

Hugs> [(x,y)| x <- [1,2,3], y <- [4,5,6]]
[(1,4),(1,5),(1,6),(2,4),(2,5),(2,6),(3,4),(3,5),(3,6)]
[PR]
by tnomura9 | 2009-08-25 07:12 | Haskell | Comments(0)
<< 3の倍数と3のつく数 Haskell を何に使うか >>