| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Agda.Termination.SparseMatrix
Contents
Description
Sparse matrices.
We assume the matrices to be very sparse, so we just implement them as sorted association lists.
Most operations are linear in the number of non-zero elements.
An exception is transposition, which needs to sort the association
list again; it has the complexity of sorting: n log n where n is
the number of non-zero elements.
Another exception is matrix multiplication, of course.
Synopsis
- data Matrix i b = Matrix (Size i) [(MIx i, b)]
- unM :: Matrix i b -> [(MIx i, b)]
- data Size i = Size {}
- data MIx i = MIx {}
- fromLists :: (Ord i, Num i, Enum i, HasZero b) => Size i -> [[b]] -> Matrix i b
- fromIndexList :: (Ord i, HasZero b) => Size i -> [(MIx i, b)] -> Matrix i b
- toLists :: (Integral i, HasZero b) => Matrix i b -> [[b]]
- size :: Matrix i b -> Size i
- square :: Ix i => Matrix i b -> Bool
- isEmpty :: (Num i, Ix i) => Matrix i b -> Bool
- isSingleton :: (Eq i, Num i, HasZero b) => Matrix i b -> Maybe b
- zipMatrices :: forall a b c i. Ord i => (a -> c) -> (b -> c) -> (a -> b -> c) -> (c -> Bool) -> Matrix i a -> Matrix i b -> Matrix i c
- add :: (Ord i, HasZero a) => (a -> a -> a) -> Matrix i a -> Matrix i a -> Matrix i a
- intersectWith :: Ord i => (a -> a -> a) -> Matrix i a -> Matrix i a -> Matrix i a
- interAssocWith :: Ord i => (a -> a -> a) -> [(i, a)] -> [(i, a)] -> [(i, a)]
- mul :: (Ix i, Eq a) => Semiring a -> Matrix i a -> Matrix i a -> Matrix i a
- transpose :: Transpose a => a -> a
- class Diagonal m e | m -> e where
- toSparseRows :: Eq i => Matrix i b -> [(i, [(i, b)])]
- supSize :: Ord i => Matrix i a -> Matrix i b -> Size i
- zipAssocWith :: Ord i => ([(i, a)] -> [(i, c)]) -> ([(i, b)] -> [(i, c)]) -> (a -> Maybe c) -> (b -> Maybe c) -> (a -> b -> Maybe c) -> [(i, a)] -> [(i, b)] -> [(i, c)]
- addRow :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b
- addColumn :: (Num i, HasZero b) => b -> Matrix i b -> Matrix i b
Basic data types
Type of matrices, parameterised on the type of values.
Sparse matrices are implemented as an ordered association list, mapping coordinates to values.
Instances
| Functor (Matrix i) Source # | |
| Foldable (Matrix i) Source # | |
Defined in Agda.Termination.SparseMatrix Methods fold :: Monoid m => Matrix i m -> m # foldMap :: Monoid m => (a -> m) -> Matrix i a -> m # foldr :: (a -> b -> b) -> b -> Matrix i a -> b # foldr' :: (a -> b -> b) -> b -> Matrix i a -> b # foldl :: (b -> a -> b) -> b -> Matrix i a -> b # foldl' :: (b -> a -> b) -> b -> Matrix i a -> b # foldr1 :: (a -> a -> a) -> Matrix i a -> a # foldl1 :: (a -> a -> a) -> Matrix i a -> a # elem :: Eq a => a -> Matrix i a -> Bool # maximum :: Ord a => Matrix i a -> a # minimum :: Ord a => Matrix i a -> a # | |
| Traversable (Matrix i) Source # | |
Defined in Agda.Termination.SparseMatrix | |
| (Eq i, Eq b) => Eq (Matrix i b) Source # | |
| (Ord i, Ord b) => Ord (Matrix i b) Source # | |
Defined in Agda.Termination.SparseMatrix | |
| (Integral i, HasZero b, Show i, Show b) => Show (Matrix i b) Source # | |
| (Ord i, PartialOrd a) => PartialOrd (Matrix i a) Source # | Pointwise comparison. Only matrices with the same dimension are comparable. |
Defined in Agda.Termination.SparseMatrix Methods comparable :: Comparable (Matrix i a) Source # | |
| (Integral i, HasZero b, Pretty b) => Pretty (Matrix i b) Source # | |
| (Ord i, HasZero o, NotWorse o) => NotWorse (Matrix i o) Source # | We assume the matrices have the same dimension. |
| (Integral i, HasZero b) => Diagonal (Matrix i b) b Source # | Diagonal of sparse matrix.
|
Defined in Agda.Termination.SparseMatrix | |
Size of a matrix.
Type of matrix indices (row, column).
Generating and creating matrices
fromIndexList :: (Ord i, HasZero b) => Size i -> [(MIx i, b)] -> Matrix i b Source #
Constructs a matrix from a list of (index, value)-pairs.
O(n) where n is size of the list.
Precondition: indices are unique.
toLists :: (Integral i, HasZero b) => Matrix i b -> [[b]] Source #
Converts a matrix to a list of row lists.
O(size) where size = rows × cols.
Combining and querying matrices
isSingleton :: (Eq i, Num i, HasZero b) => Matrix i b -> Maybe b Source #
Returns 'Just b' iff it is a 1x1 matrix with just one entry b.
O(1).
Arguments
| :: Ord i | |
| => (a -> c) | Element only present in left matrix. |
| -> (b -> c) | Element only present in right matrix. |
| -> (a -> b -> c) | Element present in both matrices. |
| -> (c -> Bool) | Result counts as zero? |
| -> Matrix i a | |
| -> Matrix i b | |
| -> Matrix i c |
General pointwise combination function for sparse matrices.
O(n1 + n2).
intersectWith :: Ord i => (a -> a -> a) -> Matrix i a ->