Cumulative standard deviation: Difference between revisions

Content added Content deleted
Line 1,904: Line 1,904:




Or, as a map-accumulation over an indexed list
Or, perhaps more simply, as a map-accumulation over an indexed list:


<lang Haskell>import Data.List (mapAccumL)
<lang Haskell>import Data.List (mapAccumL)

-------------- CUMULATIVE STANDARD DEVIATION -------------
-------------- CUMULATIVE STANDARD DEVIATION -------------

cumulativeStdDevns :: [Float] -> [Float]
cumulativeStdDevns :: [Float] -> [Float]
cumulativeStdDevns xs = snd $ mapAccumL go (0, 0) $ zip [1 ..] xs
cumulativeStdDevns xs = snd $ mapAccumL go (0, 0) $ zip [1.0 ..] xs
where
where
go (s, q) (i, x) =
go (s, q) (i, x) =
let _s = s + x
let _s = s + x
_q = q + (x ^ 2)
_q = q + (x ^ 2)
_i = fromIntegral i
in ((_s, _q), sqrt ((_q / i) - ((_s / i) ^ 2)))
in ((_s, _q), sqrt ((_q / _i) - ((_s / _i) ^ 2)))


--------------------------- TEST -------------------------
--------------------------- TEST -------------------------
main :: IO ()
main :: IO ()