Use hmatrix to generate random input with Gaussian distribution.

This commit is contained in:
Jesse D. McDonald 2013-11-11 02:42:11 -06:00
parent 9a1803ec71
commit 703e4b2531
1 changed files with 9 additions and 5 deletions

View File

@ -8,8 +8,10 @@ import Data.List as L
import Data.Vector.Storable as V import Data.Vector.Storable as V
import Data.Vector.Storable.Mutable as MV import Data.Vector.Storable.Mutable as MV
import Numeric.LinearAlgebra as LA import Numeric.LinearAlgebra as LA
import Numeric.GSL.Fourier as LA
import Control.Applicative import Control.Applicative
import Data.Complex
import System.Random import System.Random
import System.Time import System.Time
import Text.Printf import Text.Printf
@ -49,13 +51,15 @@ convolve kernel input = V.generate osize $ \j -> rkernel <.> V.slice j ksize inp
main :: IO () main :: IO ()
main = do main = do
let isize = 2000000 let isize = 2000000
(input, inputTime) <- time $ V.fromListN isize . randoms <$> newStdGen seed <- randomIO
(input, inputTime) <- time $ return $ LA.randomVector seed Gaussian isize
(_, kernelTime) <- time $ return lowPassKernel (_, kernelTime) <- time $ return lowPassKernel
(result, resultTime) <- time $ return $ convolve lowPassKernel input (result, resultTime) <- time $ return $ convolve lowPassKernel input
V.mapM_ (printf "%0.6f\n") $ V.slice 0 50 result V.mapM_ (printf "%10.6f\n") $ V.slice 0 50 result
printf "Input Time: %0.6f seconds\n" $ inputTime --V.mapM_ (printf "%10.6f\n") $ V.map magnitude $ LA.fft $ V.map (:+0) result
printf "Kernel Time: %0.6f seconds\n" $ kernelTime printf "Input Time: %8.6f seconds\n" $ inputTime
printf "Result Time: %0.6f seconds\n" $ resultTime printf "Kernel Time: %8.6f seconds\n" $ kernelTime
printf "Result Time: %8.6f seconds\n" $ resultTime
time :: IO a -> IO (a, Double) time :: IO a -> IO (a, Double)
time f = do time f = do