diff options
Diffstat (limited to 'lib/Data/Packed/Random.hs')
-rw-r--r-- | lib/Data/Packed/Random.hs | 11 |
1 files changed, 5 insertions, 6 deletions
diff --git a/lib/Data/Packed/Random.hs b/lib/Data/Packed/Random.hs index 3b02225..33a11d7 100644 --- a/lib/Data/Packed/Random.hs +++ b/lib/Data/Packed/Random.hs | |||
@@ -23,7 +23,6 @@ import Numeric.GSL.Vector | |||
23 | import Data.Packed.Matrix | 23 | import Data.Packed.Matrix |
24 | import Data.Packed.Vector | 24 | import Data.Packed.Vector |
25 | import Numeric.LinearAlgebra.Algorithms | 25 | import Numeric.LinearAlgebra.Algorithms |
26 | import Numeric.LinearAlgebra.Interface | ||
27 | import Numeric.LinearAlgebra.Linear | 26 | import Numeric.LinearAlgebra.Linear |
28 | 27 | ||
29 | -- | Obtains a matrix whose rows are pseudorandom samples from a multivariate | 28 | -- | Obtains a matrix whose rows are pseudorandom samples from a multivariate |
@@ -37,7 +36,7 @@ gaussianSample seed n med cov = m where | |||
37 | c = dim med | 36 | c = dim med |
38 | meds = constant 1 n `outer` med | 37 | meds = constant 1 n `outer` med |
39 | rs = reshape c $ randomVector seed Gaussian (c * n) | 38 | rs = reshape c $ randomVector seed Gaussian (c * n) |
40 | m = rs <> cholSH cov + meds | 39 | m = rs `mXm` cholSH cov `add` meds |
41 | 40 | ||
42 | -- | Obtains a matrix whose rows are pseudorandom samples from a multivariate | 41 | -- | Obtains a matrix whose rows are pseudorandom samples from a multivariate |
43 | -- uniform distribution. | 42 | -- uniform distribution. |
@@ -52,7 +51,7 @@ uniformSample seed n rgs = m where | |||
52 | d = dim a | 51 | d = dim a |
53 | dat = toRows $ reshape n $ randomVector seed Uniform (n*d) | 52 | dat = toRows $ reshape n $ randomVector seed Uniform (n*d) |
54 | am = constant 1 n `outer` a | 53 | am = constant 1 n `outer` a |
55 | m = fromColumns (zipWith scale cs dat) + am | 54 | m = fromColumns (zipWith scale cs dat) `add` am |
56 | 55 | ||
57 | ------------ utilities ------------------------------- | 56 | ------------ utilities ------------------------------- |
58 | 57 | ||
@@ -61,7 +60,7 @@ meanCov :: Matrix Double -> (Vector Double, Matrix Double) | |||
61 | meanCov x = (med,cov) where | 60 | meanCov x = (med,cov) where |
62 | r = rows x | 61 | r = rows x |
63 | k = 1 / fromIntegral r | 62 | k = 1 / fromIntegral r |
64 | med = constant k r <> x | 63 | med = constant k r `vXm` x |
65 | meds = constant 1 r `outer` med | 64 | meds = constant 1 r `outer` med |
66 | xc = x - meds | 65 | xc = x `sub` meds |
67 | cov = (trans xc <> xc) / fromIntegral (r-1) | 66 | cov = flip scale (trans xc `mXm` xc) (recip (fromIntegral (r-1))) |