PageRenderTime 39ms CodeModel.GetById 16ms RepoModel.GetById 0ms app.codeStats 0ms

/benchmark/bench.hs

http://github.com/bos/statistics
Haskell | 71 lines | 54 code | 8 blank | 9 comment | 0 complexity | cd41e7b0bfb90cd78be4c50ebf7bd3c7 MD5 | raw file
Possible License(s): BSD-2-Clause
  1. import Control.Monad.ST (runST)
  2. import Criterion.Main
  3. import Data.Complex
  4. import Statistics.Sample
  5. import Statistics.Transform
  6. import Statistics.Correlation.Pearson
  7. import System.Random.MWC
  8. import qualified Data.Vector.Unboxed as U
  9. -- Test sample
  10. sample :: U.Vector Double
  11. sample = runST $ flip uniformVector 10000 =<< create
  12. -- Weighted test sample
  13. sampleW :: U.Vector (Double,Double)
  14. sampleW = U.zip sample (U.reverse sample)
  15. -- Comlex vector for FFT tests
  16. sampleC :: U.Vector (Complex Double)
  17. sampleC = U.zipWith (:+) sample (U.reverse sample)
  18. -- Simple benchmark for functions from Statistics.Sample
  19. main :: IO ()
  20. main =
  21. defaultMain
  22. [ bgroup "sample"
  23. [ bench "range" $ nf (\x -> range x) sample
  24. -- Mean
  25. , bench "mean" $ nf (\x -> mean x) sample
  26. , bench "meanWeighted" $ nf (\x -> meanWeighted x) sampleW
  27. , bench "harmonicMean" $ nf (\x -> harmonicMean x) sample
  28. , bench "geometricMean" $ nf (\x -> geometricMean x) sample
  29. -- Variance
  30. , bench "variance" $ nf (\x -> variance x) sample
  31. , bench "varianceUnbiased" $ nf (\x -> varianceUnbiased x) sample
  32. , bench "varianceWeighted" $ nf (\x -> varianceWeighted x) sampleW
  33. -- Correlation
  34. , bench "pearson" $ nf (\x -> pearson (U.reverse sample) x) sample
  35. , bench "pearson'" $ nf (\x -> pearson' (U.reverse sample) x) sample
  36. , bench "pearsonFast" $ nf (\x -> pearsonFast (U.reverse sample) x) sample
  37. -- Other
  38. , bench "stdDev" $ nf (\x -> stdDev x) sample
  39. , bench "skewness" $ nf (\x -> skewness x) sample
  40. , bench "kurtosis" $ nf (\x -> kurtosis x) sample
  41. -- Central moments
  42. , bench "C.M. 2" $ nf (\x -> centralMoment 2 x) sample
  43. , bench "C.M. 3" $ nf (\x -> centralMoment 3 x) sample
  44. , bench "C.M. 4" $ nf (\x -> centralMoment 4 x) sample
  45. , bench "C.M. 5" $ nf (\x -> centralMoment 5 x) sample
  46. ]
  47. , bgroup "FFT"
  48. [ bgroup "fft"
  49. [ bench (show n) $ whnf fft (U.take n sampleC) | n <- fftSizes ]
  50. , bgroup "ifft"
  51. [ bench (show n) $ whnf ifft (U.take n sampleC) | n <- fftSizes ]
  52. , bgroup "dct"
  53. [ bench (show n) $ whnf dct (U.take n sample) | n <- fftSizes ]
  54. , bgroup "dct_"
  55. [ bench (show n) $ whnf dct_ (U.take n sampleC) | n <- fftSizes ]
  56. , bgroup "idct"
  57. [ bench (show n) $ whnf idct (U.take n sample) | n <- fftSizes ]
  58. , bgroup "idct_"
  59. [ bench (show n) $ whnf idct_ (U.take n sampleC) | n <- fftSizes ]
  60. ]
  61. ]
  62. fftSizes :: [Int]
  63. fftSizes = [32,128,512,2048]