1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77
|
module Main where
import Data.Complex
import Statistics.Sample
import Statistics.Transform
import Statistics.Correlation
import System.Random.MWC
import qualified Data.Vector.Unboxed as VU
import qualified Data.Vector.Unboxed.Mutable as MVU
import Bench
-- Test sample
sample :: VU.Vector Double
sample = VU.create $ do g <- create
MVU.replicateM 10000 (uniform g)
-- Weighted test sample
sampleW :: VU.Vector (Double,Double)
sampleW = VU.zip sample (VU.reverse sample)
-- Complex vector for FFT tests
sampleC :: VU.Vector (Complex Double)
sampleC = VU.zipWith (:+) sample (VU.reverse sample)
-- Simple benchmark for functions from Statistics.Sample
main :: IO ()
main =
defaultMain
[ bgroup "sample"
[ bench "range" $ nf (\x -> range x) sample
-- Mean
, bench "mean" $ nf (\x -> mean x) sample
, bench "meanWeighted" $ nf (\x -> meanWeighted x) sampleW
, bench "harmonicMean" $ nf (\x -> harmonicMean x) sample
, bench "geometricMean" $ nf (\x -> geometricMean x) sample
-- Variance
, bench "variance" $ nf (\x -> variance x) sample
, bench "varianceUnbiased" $ nf (\x -> varianceUnbiased x) sample
, bench "varianceWeighted" $ nf (\x -> varianceWeighted x) sampleW
-- Correlation
, bench "pearson" $ nf pearson sampleW
, bench "covariance" $ nf covariance sampleW
, bench "correlation" $ nf correlation sampleW
, bench "covariance2" $ nf (covariance2 sample) sample
, bench "correlation2" $ nf (correlation2 sample) sample
-- Other
, bench "stdDev" $ nf (\x -> stdDev x) sample
, bench "skewness" $ nf (\x -> skewness x) sample
, bench "kurtosis" $ nf (\x -> kurtosis x) sample
-- Central moments
, bench "C.M. 2" $ nf (\x -> centralMoment 2 x) sample
, bench "C.M. 3" $ nf (\x -> centralMoment 3 x) sample
, bench "C.M. 4" $ nf (\x -> centralMoment 4 x) sample
, bench "C.M. 5" $ nf (\x -> centralMoment 5 x) sample
]
, bgroup "FFT"
[ bgroup "fft"
[ bench (show n) $ whnf fft (VU.take n sampleC) | n <- fftSizes ]
, bgroup "ifft"
[ bench (show n) $ whnf ifft (VU.take n sampleC) | n <- fftSizes ]
, bgroup "dct"
[ bench (show n) $ whnf dct (VU.take n sample) | n <- fftSizes ]
, bgroup "dct_"
[ bench (show n) $ whnf dct_ (VU.take n sampleC) | n <- fftSizes ]
, bgroup "idct"
[ bench (show n) $ whnf idct (VU.take n sample) | n <- fftSizes ]
, bgroup "idct_"
[ bench (show n) $ whnf idct_ (VU.take n sampleC) | n <- fftSizes ]
]
]
fftSizes :: [Int]
fftSizes = [32,128,512,2048]
|