平均と分散


ときどきの雑記帖 リターンズ - 平均と分散SqueakSmalltalk で。Ruby と違って 平均を算出する #average が組み込み(?)で用意されているので、分散だけ計算させます。すでに課題のことは眼中にありません。あしからず。w

| random data average variance |

data := OrderedCollection new.
random := Random new.
1000 timesRepeat: [data add: random next].

average := data average.
variance := (data collect: [:each | (each - average) raisedTo: 2]) average.

^ {#平均 -> average. #分散 -> variance}
=> {#平均 -> 0.4988085386691653 . #分散 -> 0.0790694479867911}


データ数がやたら大きいときを想定して、#inject:into: 版も。もっとも、そんなことを気にするくらい多いときは、いろんなものを根本的に見直さないといけませんけどね。

| random data average variance |

data := OrderedCollection new.
random := Random new.
1000 timesRepeat: [data add: random next].

average := data average.
variance := (data 
      inject: 0 into: [:sum :each | sum + ((each - average) raisedTo: 2)])
   / data size.

^ {#平均 -> average. #分散 -> variance}