如何使用随机fu(Haskell)从正态分布生成n个随机数?

如何使用随机fu(Haskell)从正态分布生成n个随机数?,haskell,random,statistics,Haskell,Random,Statistics,这个问题对我来说似乎很简单,但我找不到一个简单的答案 假设您希望从均值为10、方差为1的正态分布中获取一个大小为n的样本,然后获取其均值和方差,以验证样本是否来自正态分布 我想是这样的: values = take n $ sample (normal 10 1) (avg values, variance values) 我正在尝试使用随机fu库,因此如果您能使用该库提供答案,我将非常感激。Haskell中的随机性总是存在一种尴尬——因为Haskell是纯随机的,所以您需要某种“随机”源ra

这个问题对我来说似乎很简单,但我找不到一个简单的答案

假设您希望从均值为10、方差为1的正态分布中获取一个大小为n的样本,然后获取其均值和方差,以验证样本是否来自正态分布

我想是这样的:

values = take n $ sample (normal 10 1)
(avg values, variance values)

我正在尝试使用随机fu库,因此如果您能使用该库提供答案,我将非常感激。

Haskell中的随机性总是存在一种尴尬——因为Haskell是纯随机的,所以您需要某种“随机”源
random fu
用于此目的,当您想要操纵随机值时,您可以在这个monad中工作

import Data.Random
import Control.Monad (replicateM)

average :: [Double] -> Double
average xs = sum xs / fromIntegral (length xs)

variance :: [Double] -> Double
variance xs = average [ (x - m)^2  | x <- xs ] 
  where m = average xs

main :: IO ()
main = do
  sample <- runRVar (replicateM 10 (normal 10 1)) StdRandom :: IO [Double]
  putStrLn $ "Average: " ++ show (average sample)
  putStrLn $ "Variance: " ++ show (variance sample)

我知道会有些尴尬。这正是我要找的。谢谢
ghci> main
Average: 10.294887142436771
Variance: 0.7129578122237161
ghci> main
Average: 9.677325092160597
Variance: 0.9894150286175698
ghci> main
Average: 9.714089727813253
Variance: 1.0279068711054316
ghci> main
Average: 10.32028785267642
Variance: 0.8574243439019995
ghci> main
Average: 9.696843993234065
Variance: 0.45301180269725994