平均と分散
ときどきの雑記帖 リターンズ - 平均と分散 を Squeak の Smalltalk で。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}