Safe Haskell | Safe-Infered |
---|
This module provides common funtions for manipulating sparse vectors
- type Index = Int
- type SVec α = IntMap α
- data SparseVector α = SV {}
- setLength :: Int -> SparseVector α -> SparseVector α
- emptyVec :: SparseVector α
- zeroVec :: Int -> SparseVector α
- isZeroVec, isNotZeroVec :: SparseVector α -> Bool
- singVec :: (Eq α, Num α) => α -> SparseVector α
- partitionVec :: Num α => (α -> Bool) -> SparseVector α -> (SparseVector α, SparseVector α)
- (!) :: Num α => SparseVector α -> Index -> α
- eraseInVec :: Num α => SparseVector α -> Index -> SparseVector α
- vecIns :: (Eq α, Num α) => SparseVector α -> (Index, α) -> SparseVector α
- unionVecsWith :: (α -> α -> α) -> SparseVector α -> SparseVector α -> SparseVector α
- intersectVecsWith :: (α -> α -> α) -> SparseVector α -> SparseVector α -> SparseVector α
- fillVec :: Num α => SparseVector α -> [α]
- sparseList :: (Num α, Eq α) => [α] -> SparseVector α
- dot :: (Eq α, Num α) => SparseVector α -> SparseVector α -> α
- · :: (Eq α, Num α) => SparseVector α -> SparseVector α -> α
Sparse vector datatype
data SparseVector α Source
Sparse vector is just indexed map of non-zero values
Functor SparseVector |
|
Foldable SparseVector | fold functions are applied to non-zero values |
Eq α => Eq (SparseVector α) | |
(Eq α, Num α) => Num (SparseVector α) |
|
(Show α, Eq α, Num α) => Show (SparseVector α) | Shows size and filled vector (but without zeroes) |
Monoid (SparseVector α) | Monoid Examples:
|
Basic functions
setLength :: Int -> SparseVector α -> SparseVector αSource
Sets vector's size
emptyVec :: SparseVector αSource
Vector of zero size with no values
zeroVec :: Int -> SparseVector αSource
Vector of given size with no non-zero values
isZeroVec, isNotZeroVec :: SparseVector α -> BoolSource
Checks if vector has no non-zero values (i.e. is empty)
singVec :: (Eq α, Num α) => α -> SparseVector αSource
Vector of length 1 with given value
Filter
partitionVec :: Num α => (α -> Bool) -> SparseVector α -> (SparseVector α, SparseVector α)Source
Splits vector using predicate and returns a pair with filtered values and re-enumereted second part (that doesn't satisfy predicate). For example:
>>>
partitionVec (>0) (sparseList [0,1,-1,2,3,0,-4,5,-6,0,7])
( sparseList [0,1,0,2,3,0,0,5,0,0,7], sparseList [-1,-4,-6] )
Lookup/update
(!) :: Num α => SparseVector α -> Index -> αSource
Looks up an element in the vector (if not found, zero is returned)
eraseInVec :: Num α => SparseVector α -> Index -> SparseVector αSource
Deletes element of vector at given index (size of vector doesn't change)
vecIns :: (Eq α, Num α) => SparseVector α -> (Index, α) -> SparseVector αSource
Updates value at given index
Vectors combining
unionVecsWith :: (α -> α -> α) -> SparseVector α -> SparseVector α -> SparseVector αSource
Unions non-zero values of vectors and applies given function on intersection
intersectVecsWith :: (α -> α -> α) -> SparseVector α -> SparseVector α -> SparseVector αSource
Intersects non-zero values of vectors and applies given function on them
To/from list
fillVec :: Num α => SparseVector α -> [α]Source
Returns plain list with all zeroes restored
sparseList :: (Num α, Eq α) => [α] -> SparseVector αSource
Converts plain list to sparse vector, throwing out all zeroes
Multiplications
dot :: (Eq α, Num α) => SparseVector α -> SparseVector α -> αSource
Dot product of two sparse vectors
· :: (Eq α, Num α) => SparseVector α -> SparseVector α -> αSource
Unicode alias for dot