summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorVivian McPhail <haskell.vivian.mcphail@gmail.com>2010-07-12 22:23:14 +0000
committerVivian McPhail <haskell.vivian.mcphail@gmail.com>2010-07-12 22:23:14 +0000
commit7659d9c67f75e1f665d6b02663ee8767e97762b4 (patch)
treecddaaf3156cadef9aaf564abf9d033b72f6e2e67 /lib
parent007960d648485d5c161cd366d16282bc29fac68b (diff)
refactored Data.Packed.Vector to remove any numerics
Diffstat (limited to 'lib')
-rw-r--r--lib/Data/Packed/Matrix.hs17
-rw-r--r--lib/Data/Packed/Random.hs1
-rw-r--r--lib/Data/Packed/Vector.hs50
-rw-r--r--lib/Graphics/Plot.hs6
-rw-r--r--lib/Numeric/LinearAlgebra.hs4
-rw-r--r--lib/Numeric/LinearAlgebra/Algorithms.hs4
-rw-r--r--lib/Numeric/LinearAlgebra/Interface.hs2
-rw-r--r--lib/Numeric/LinearAlgebra/Linear.hs33
8 files changed, 64 insertions, 53 deletions
diff --git a/lib/Data/Packed/Matrix.hs b/lib/Data/Packed/Matrix.hs
index 438dabc..d5a287d 100644
--- a/lib/Data/Packed/Matrix.hs
+++ b/lib/Data/Packed/Matrix.hs
@@ -30,7 +30,7 @@ module Data.Packed.Matrix (
30 extractRows, 30 extractRows,
31 ident, diag, diagRect, takeDiag, 31 ident, diag, diagRect, takeDiag,
32 liftMatrix, liftMatrix2, liftMatrix2Auto, 32 liftMatrix, liftMatrix2, liftMatrix2Auto,
33 dispf, disps, dispcf, latexFormat, format, 33 dispf, disps, dispcf, vecdisp, latexFormat, format,
34 loadMatrix, saveMatrix, fromFile, fileDimensions, 34 loadMatrix, saveMatrix, fromFile, fileDimensions,
35 readMatrix, fromArray2D 35 readMatrix, fromArray2D
36) where 36) where
@@ -314,6 +314,21 @@ formatScaled dec t = "E"++show o++"\n" ++ ss
314 o = floor $ maximum $ map (logBase 10 . abs) $ toList $ flatten t 314 o = floor $ maximum $ map (logBase 10 . abs) $ toList $ flatten t
315 fmt = '%':show (dec+3) ++ '.':show dec ++"f" 315 fmt = '%':show (dec+3) ++ '.':show dec ++"f"
316 316
317{- | Show a vector using a function for showing matrices.
318
319@disp = putStr . vecdisp ('dispf' 2)
320
321\> disp ('linspace' 10 (0,1))
32210 |> 0.00 0.11 0.22 0.33 0.44 0.56 0.67 0.78 0.89 1.00
323@
324-}
325vecdisp :: (Element t) => (Matrix t -> String) -> Vector t -> String
326vecdisp f v
327 = ((show (dim v) ++ " |> ") ++) . (++"\n")
328 . unwords . lines . tail . dropWhile (not . (`elem` " \n"))
329 . f . trans . reshape 1
330 $ v
331
317-- | Tool to display matrices with latex syntax. 332-- | Tool to display matrices with latex syntax.
318latexFormat :: String -- ^ type of braces: \"matrix\", \"bmatrix\", \"pmatrix\", etc. 333latexFormat :: String -- ^ type of braces: \"matrix\", \"bmatrix\", \"pmatrix\", etc.
319 -> String -- ^ Formatted matrix, with elements separated by spaces and newlines 334 -> String -- ^ Formatted matrix, with elements separated by spaces and newlines
diff --git a/lib/Data/Packed/Random.hs b/lib/Data/Packed/Random.hs
index e57ba6e..3b02225 100644
--- a/lib/Data/Packed/Random.hs
+++ b/lib/Data/Packed/Random.hs
@@ -24,6 +24,7 @@ import Data.Packed.Matrix
24import Data.Packed.Vector 24import Data.Packed.Vector
25import Numeric.LinearAlgebra.Algorithms 25import Numeric.LinearAlgebra.Algorithms
26import Numeric.LinearAlgebra.Interface 26import Numeric.LinearAlgebra.Interface
27import Numeric.LinearAlgebra.Linear
27 28
28-- | Obtains a matrix whose rows are pseudorandom samples from a multivariate 29-- | Obtains a matrix whose rows are pseudorandom samples from a multivariate
29-- Gaussian distribution. 30-- Gaussian distribution.
diff --git a/lib/Data/Packed/Vector.hs b/lib/Data/Packed/Vector.hs
index 40dd6b5..81dfa37 100644
--- a/lib/Data/Packed/Vector.hs
+++ b/lib/Data/Packed/Vector.hs
@@ -18,9 +18,11 @@ module Data.Packed.Vector (
18 fromList, (|>), toList, buildVector, 18 fromList, (|>), toList, buildVector,
19 dim, (@>), 19 dim, (@>),
20 subVector, takesV, join, 20 subVector, takesV, join,
21 constant, linspace, 21-- moved to Numeric.LinearAlgebra.Linear
22 vecdisp, 22-- constant, linspace,
23-- moved to Numeric.LinearAlgebra.Interface typeclass 23-- moved to Data.Packed.Matrix
24-- vecdisp,
25-- moved to Numeric.LinearAlgebra.Linear typeclass
24-- vectorFMax, vectorFMin, vectorFMaxIndex, vectorFMinIndex, 26-- vectorFMax, vectorFMin, vectorFMaxIndex, vectorFMinIndex,
25-- vectorMax, vectorMin, 27-- vectorMax, vectorMin,
26 vectorMaxIndex, vectorMinIndex, 28 vectorMaxIndex, vectorMinIndex,
@@ -30,10 +32,9 @@ module Data.Packed.Vector (
30 foldLoop, foldVector, foldVectorG 32 foldLoop, foldVector, foldVectorG
31) where 33) where
32 34
33import Data.Packed.Internal 35import Data.Packed.Internal.Vector
34import Numeric.GSL.Vector 36import Numeric.GSL.Vector
35-- import Data.Packed.ST 37-- import Data.Packed.ST
36import Numeric.LinearAlgebra.Linear
37 38
38import Data.Binary 39import Data.Binary
39import Foreign.Storable 40import Foreign.Storable
@@ -72,19 +73,6 @@ instance (Binary a, Storable a) => Binary (Vector a) where
72------------------------------------------------------------------- 73-------------------------------------------------------------------
73 74
74 75
75{- | Creates a real vector containing a range of values:
76
77@\> linspace 5 (-3,7)
785 |> [-3.0,-0.5,2.0,4.5,7.0]@
79
80Logarithmic spacing can be defined as follows:
81
82@logspace n (a,b) = 10 ** linspace n (a,b)@
83-}
84linspace :: (Enum e, Linear Vector e, Element e) => Int -> (e, e) -> Vector e
85linspace n (a,b) = addConstant a $ scale s $ fromList [0 .. fromIntegral n-1]
86 where s = (b-a)/fromIntegral (n-1)
87
88{- 76{-
89vectorFMax :: Vector Float -> Float 77vectorFMax :: Vector Float -> Float
90vectorFMax = toScalarF Max 78vectorFMax = toScalarF Max
@@ -114,15 +102,6 @@ vectorMinIndex :: Vector Double -> Int
114vectorMinIndex = round . toScalarR MinIdx 102vectorMinIndex = round . toScalarR MinIdx
115 103
116 104
117{- | creates a vector with a given number of equal components:
118
119@> constant 2 7
1207 |> [2.0,2.0,2.0,2.0,2.0,2.0,2.0]@
121-}
122constant :: Element a => a -> Int -> Vector a
123-- constant x n = runSTVector (newVector x n)
124constant = constantD -- about 2x faster
125
126{- | creates a Vector of the specified length using the supplied function to 105{- | creates a Vector of the specified length using the supplied function to
127 to map the index to the value at that index. 106 to map the index to the value at that index.
128 107
@@ -130,26 +109,11 @@ constant = constantD -- about 2x faster
1304 |> [0.0,1.0,2.0,3.0]@ 1094 |> [0.0,1.0,2.0,3.0]@
131 110
132-} 111-}
133buildVector :: Element a => Int -> (Int -> a) -> Vector a 112buildVector :: Storable a => Int -> (Int -> a) -> Vector a
134buildVector len f = 113buildVector len f =
135 fromList $ map f [0 .. (len - 1)] 114 fromList $ map f [0 .. (len - 1)]
136 115
137 116
138{- | Show a vector using a function for showing matrices.
139
140@disp = putStr . vecdisp ('dispf' 2)
141
142\> disp ('linspace' 10 (0,1))
14310 |> 0.00 0.11 0.22 0.33 0.44 0.56 0.67 0.78 0.89 1.00
144@
145-}
146vecdisp :: (Element t) => (Matrix t -> String) -> Vector t -> String
147vecdisp f v
148 = ((show (dim v) ++ " |> ") ++) . (++"\n")
149 . unwords . lines . tail . dropWhile (not . (`elem` " \n"))
150 . f . trans . reshape 1
151 $ v
152
153-- | unzip for Vectors 117-- | unzip for Vectors
154unzipVector :: (Storable a, Storable b, Storable (a,b)) => Vector (a,b) -> (Vector a,Vector b) 118unzipVector :: (Storable a, Storable b, Storable (a,b)) => Vector (a,b) -> (Vector a,Vector b)
155unzipVector = unzipVectorWith id 119unzipVector = unzipVectorWith id
diff --git a/lib/Graphics/Plot.hs b/lib/Graphics/Plot.hs
index 02b0c4c..b2acc15 100644
--- a/lib/Graphics/Plot.hs
+++ b/lib/Graphics/Plot.hs
@@ -30,7 +30,7 @@ module Graphics.Plot(
30 30
31import Data.Packed 31import Data.Packed
32import Numeric.LinearAlgebra(outer) 32import Numeric.LinearAlgebra(outer)
33import Numeric.LinearAlgebra.Linear(Vectors(..)) 33import Numeric.LinearAlgebra.Linear
34import Data.List(intersperse) 34import Data.List(intersperse)
35import System.Process (system) 35import System.Process (system)
36 36
@@ -153,10 +153,10 @@ matrixToPGM m = header ++ unlines (map unwords ll) where
153 maxgray = 255.0 153 maxgray = 255.0
154 maxval = vectorMax $ flatten $ m 154 maxval = vectorMax $ flatten $ m
155 minval = vectorMin $ flatten $ m 155 minval = vectorMin $ flatten $ m
156 scale = if (maxval == minval) 156 scale' = if (maxval == minval)
157 then 0.0 157 then 0.0
158 else maxgray / (maxval - minval) 158 else maxgray / (maxval - minval)
159 f x = show ( round ( scale *(x - minval) ) :: Int ) 159 f x = show ( round ( scale' *(x - minval) ) :: Int )
160 ll = map (map f) (toLists m) 160 ll = map (map f) (toLists m)
161 161
162-- | imshow shows a representation of a matrix as a gray level image using ImageMagick's display. 162-- | imshow shows a representation of a matrix as a gray level image using ImageMagick's display.
diff --git a/lib/Numeric/LinearAlgebra.hs b/lib/Numeric/LinearAlgebra.hs
index 7664a9f..e8a14d6 100644
--- a/lib/Numeric/LinearAlgebra.hs
+++ b/lib/Numeric/LinearAlgebra.hs
@@ -15,9 +15,11 @@ This module reexports all normally required functions for Linear Algebra applica
15module Numeric.LinearAlgebra ( 15module Numeric.LinearAlgebra (
16 module Data.Packed, 16 module Data.Packed,
17 module Numeric.LinearAlgebra.Algorithms, 17 module Numeric.LinearAlgebra.Algorithms,
18 module Numeric.LinearAlgebra.Interface 18 module Numeric.LinearAlgebra.Interface,
19 module Numeric.LinearAlgebra.Linear
19) where 20) where
20 21
21import Data.Packed 22import Data.Packed
22import Numeric.LinearAlgebra.Algorithms 23import Numeric.LinearAlgebra.Algorithms
23import Numeric.LinearAlgebra.Interface 24import Numeric.LinearAlgebra.Interface
25import Numeric.LinearAlgebra.Linear
diff --git a/lib/Numeric/LinearAlgebra/Algorithms.hs b/lib/Numeric/LinearAlgebra/Algorithms.hs
index 5191480..1109296 100644
--- a/lib/Numeric/LinearAlgebra/Algorithms.hs
+++ b/lib/Numeric/LinearAlgebra/Algorithms.hs
@@ -21,7 +21,6 @@ imported from "Numeric.LinearAlgebra.LAPACK".
21module Numeric.LinearAlgebra.Algorithms ( 21module Numeric.LinearAlgebra.Algorithms (
22-- * Supported types 22-- * Supported types
23 Field(), 23 Field(),
24 Vectors(..),
25-- * Products 24-- * Products
26 multiply, -- dot, moved dot to typeclass 25 multiply, -- dot, moved dot to typeclass
27 outer, kronecker, 26 outer, kronecker,
@@ -67,7 +66,6 @@ module Numeric.LinearAlgebra.Algorithms (
67-- * Misc 66-- * Misc
68 ctrans, 67 ctrans,
69 eps, i, 68 eps, i,
70 Linear(..),
71-- * Util 69-- * Util
72 haussholder, 70 haussholder,
73 unpackQR, unpackHess, 71 unpackQR, unpackHess,
@@ -78,7 +76,7 @@ module Numeric.LinearAlgebra.Algorithms (
78 76
79 77
80import Data.Packed.Internal hiding ((//)) 78import Data.Packed.Internal hiding ((//))
81import Data.Packed.Vector 79--import Data.Packed.Vector
82import Data.Packed.Matrix 80import Data.Packed.Matrix
83import Data.Complex 81import Data.Complex
84import Numeric.GSL.Vector 82import Numeric.GSL.Vector
diff --git a/lib/Numeric/LinearAlgebra/Interface.hs b/lib/Numeric/LinearAlgebra/Interface.hs
index 8d2b52a..f8917a0 100644
--- a/lib/Numeric/LinearAlgebra/Interface.hs
+++ b/lib/Numeric/LinearAlgebra/Interface.hs
@@ -28,7 +28,7 @@ import Numeric.LinearAlgebra.Instances()
28import Data.Packed.Vector 28import Data.Packed.Vector
29import Data.Packed.Matrix 29import Data.Packed.Matrix
30import Numeric.LinearAlgebra.Algorithms 30import Numeric.LinearAlgebra.Algorithms
31import Numeric.LinearAlgebra.Linear() 31import Numeric.LinearAlgebra.Linear
32 32
33--import Numeric.GSL.Vector 33--import Numeric.GSL.Vector
34 34
diff --git a/lib/Numeric/LinearAlgebra/Linear.hs b/lib/Numeric/LinearAlgebra/Linear.hs
index 8922e51..9a7e65f 100644
--- a/lib/Numeric/LinearAlgebra/Linear.hs
+++ b/lib/Numeric/LinearAlgebra/Linear.hs
@@ -16,11 +16,15 @@ Basic optimized operations on vectors and matrices.
16----------------------------------------------------------------------------- 16-----------------------------------------------------------------------------
17 17
18module Numeric.LinearAlgebra.Linear ( 18module Numeric.LinearAlgebra.Linear (
19 -- * Linear Algebra Typeclasses
19 Vectors(..), 20 Vectors(..),
20 Linear(..) 21 Linear(..),
22 -- * Creation of numeric vectors
23 constant, linspace
21) where 24) where
22 25
23import Data.Packed.Internal.Vector 26import Data.Packed.Internal.Vector
27import Data.Packed.Internal.Matrix
24import Data.Packed.Matrix 28import Data.Packed.Matrix
25import Data.Complex 29import Data.Complex
26import Numeric.GSL.Vector 30import Numeric.GSL.Vector
@@ -29,6 +33,7 @@ import Control.Monad(ap)
29 33
30-- | basic Vector functions 34-- | basic Vector functions
31class Num e => Vectors a e where 35class Num e => Vectors a e where
36 -- the C functions sumX are twice as fast as using foldVector
32 vectorSum :: a e -> e 37 vectorSum :: a e -> e
33 euclidean :: a e -> e 38 euclidean :: a e -> e
34 absSum :: a e -> e 39 absSum :: a e -> e
@@ -153,3 +158,29 @@ instance (Linear Vector a, Container Matrix a) => (Linear Matrix a) where
153 divide = liftMatrix2 divide 158 divide = liftMatrix2 divide
154 equal a b = cols a == cols b && flatten a `equal` flatten b 159 equal a b = cols a == cols b && flatten a `equal` flatten b
155 scalar x = (1><1) [x] 160 scalar x = (1><1) [x]
161
162
163----------------------------------------------------
164
165{- | creates a vector with a given number of equal components:
166
167@> constant 2 7
1687 |> [2.0,2.0,2.0,2.0,2.0,2.0,2.0]@
169-}
170constant :: Element a => a -> Int -> Vector a
171-- constant x n = runSTVector (newVector x n)
172constant = constantD -- about 2x faster
173
174{- | Creates a real vector containing a range of values:
175
176@\> linspace 5 (-3,7)
1775 |> [-3.0,-0.5,2.0,4.5,7.0]@
178
179Logarithmic spacing can be defined as follows:
180
181@logspace n (a,b) = 10 ** linspace n (a,b)@
182-}
183linspace :: (Enum e, Linear Vector e) => Int -> (e, e) -> Vector e
184linspace n (a,b) = addConstant a $ scale s $ fromList [0 .. fromIntegral n-1]
185 where s = (b-a)/fromIntegral (n-1)
186