Safe Haskell | None |
---|---|
Language | Haskell2010 |
Data.Matrix.Generic
Synopsis
- data Matrix (v :: Type -> Type) a = Matrix !Int !Int !Int !Int !(v a)
- dim :: Matrix m v a => m v a -> (Int, Int)
- rows :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> Int
- cols :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> Int
- unsafeIndex :: Matrix m v a => m v a -> (Int, Int) -> a
- (!) :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> (Int, Int) -> a
- takeRow :: Matrix m v a => m v a -> Int -> v a
- takeColumn :: Matrix m v a => m v a -> Int -> v a
- takeDiag :: Matrix m v a => m v a -> v a
- unsafeFromVector :: Matrix m v a => (Int, Int) -> v a -> m v a
- fromVector :: Matrix m v a => (Int, Int) -> v a -> m v a
- matrix :: forall m (v :: Type -> Type) a. Matrix m v a => Int -> [a] -> m v a
- fromList :: forall m (v :: Type -> Type) a. Matrix m v a => (Int, Int) -> [a] -> m v a
- fromLists :: forall m (v :: Type -> Type) a. Matrix m v a => [[a]] -> m v a
- fromRows :: Matrix m v a => [v a] -> m v a
- fromColumns :: Vector v a => [v a] -> Matrix v a
- empty :: forall m (v :: Type -> Type) a. Matrix m v a => m v a
- flatten :: Matrix m v a => m v a -> v a
- toRows :: Matrix m v a => m v a -> [v a]
- toColumns :: Matrix m v a => m v a -> [v a]
- toList :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> [a]
- toLists :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> [[a]]
- convert :: forall (v :: Type -> Type) a (w :: Type -> Type). (Vector v a, Vector w a) => Matrix v a -> Matrix w a
- tr :: forall (v :: Type -> Type) a. Vector v a => Matrix v a -> Matrix v a
- subMatrix :: forall (v :: Type -> Type) a. Vector v a => (Int, Int) -> (Int, Int) -> Matrix v a -> Matrix v a
- ident :: forall a (v :: Type -> Type). (Num a, Vector v a) => Int -> Matrix v a
- diag :: forall a (v :: Type -> Type) t. (Num a, Vector v a, Foldable t) => t a -> Matrix v a
- diagRect :: forall (v :: Type -> Type) a t. (Vector v a, Foldable t) => a -> (Int, Int) -> t a -> Matrix v a
- fromBlocks :: forall (v :: Type -> Type) a. Vector v a => a -> [[Matrix v a]] -> Matrix v a
- isSymmetric :: forall a (v :: Type -> Type). (Eq a, Vector v a) => Matrix v a -> Bool
- force :: forall (v :: Type -> Type) a. Vector v a => Matrix v a -> Matrix v a
- foldl :: forall (v :: Type -> Type) b a. Vector v b => (a -> b -> a) -> a -> Matrix v b -> a
- map :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b) => (a -> b) -> Matrix v a -> Matrix v b
- imap :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b) => ((Int, Int) -> a -> b) -> Matrix v a -> Matrix v b
- mapM :: forall (v :: Type -> Type) a b m. (Vector v a, Vector v b, Monad m) => (a -> m b) -> Matrix v a -> m (Matrix v b)
- imapM :: forall (v :: Type -> Type) a b m. (Vector v a, Vector v b, Monad m) => ((Int, Int) -> a -> m b) -> Matrix v a -> m (Matrix v b)
- mapM_ :: forall (v :: Type -> Type) a m b. (Vector v a, Monad m) => (a -> m b) -> Matrix v a -> m ()
- imapM_ :: forall (v :: Type -> Type) a m b. (Vector v a, Monad m) => ((Int, Int) -> a -> m b) -> Matrix v a -> m ()
- forM :: forall (v :: Type -> Type) a b m. (Vector v a, Vector v b, Monad m) => Matrix v a -> (a -> m b) -> m (Matrix v b)
- forM_ :: forall (v :: Type -> Type) a m b. (Vector v a, Monad m) => Matrix v a -> (a -> m b) -> m ()
- zipWith :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c) => (a -> b -> c) -> Matrix v a -> Matrix v b -> Matrix v c
- zipWith3 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d) => (a -> b -> c -> d) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d
- zipWith4 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e) => (a -> b -> c -> d -> e) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e
- zipWith5 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f) => (a -> b -> c -> d -> e -> f) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f
- zipWith6 :: forall (v :: Type -> Type) a b c d e f g. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v g) => (a -> b -> c -> d -> e -> f -> g) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f -> Matrix v g
- izipWith :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c) => ((Int, Int) -> a -> b -> c) -> Matrix v a -> Matrix v b -> Matrix v c
- izipWith3 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d) => ((Int, Int) -> a -> b -> c -> d) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d
- izipWith4 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e) => ((Int, Int) -> a -> b -> c -> d -> e) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e
- izipWith5 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f) => ((Int, Int) -> a -> b -> c -> d -> e -> f) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f
- izipWith6 :: forall (v :: Type -> Type) a b c d e f g. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v g) => ((Int, Int) -> a -> b -> c -> d -> e -> f -> g) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f -> Matrix v g
- zip :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b, Vector v (a, b)) => Matrix v a -> Matrix v b -> Matrix v (a, b)
- zip3 :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c, Vector v (a, b, c)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v (a, b, c)
- zip4 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v (a, b, c, d)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v (a, b, c, d)
- zip5 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v (a, b, c, d, e)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v (a, b, c, d, e)
- zip6 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v (a, b, c, d, e, f)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f -> Matrix v (a, b, c, d, e, f)
- zipWithM :: forall m (v :: Type -> Type) a b c. (Monad m, Vector v a, Vector v b, Vector v c) => (a -> b -> m c) -> Matrix v a -> Matrix v b -> m (Matrix v c)
- zipWithM_ :: forall m (v :: Type -> Type) a b c. (Monad m, Vector v a, Vector v b) => (a -> b -> m c) -> Matrix v a -> Matrix v b -> m ()
- unzip :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b, Vector v (a, b)) => Matrix v (a, b) -> (Matrix v a, Matrix v b)
- unzip3 :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c, Vector v (a, b, c)) => Matrix v (a, b, c) -> (Matrix v a, Matrix v b, Matrix v c)
- unzip4 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v (a, b, c, d)) => Matrix v (a, b, c, d) -> (Matrix v a, Matrix v b, Matrix v c, Matrix v d)
- unzip5 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v (a, b, c, d, e)) => Matrix v (a, b, c, d, e) -> (Matrix v a, Matrix v b, Matrix v c, Matrix v d, Matrix v e)
- unzip6 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v (a, b, c, d, e, f)) => Matrix v (a, b, c, d, e, f) -> (Matrix v a, Matrix v b, Matrix v c, Matrix v d, Matrix v e, Matrix v f)
- sequence :: forall (v :: Type -> Type) a m. (Vector v a, Vector v (m a), Monad m) => Matrix v (m a) -> m (Matrix v a)
- sequence_ :: forall (v :: Type -> Type) m a. (Vector v (m a), Monad m) => Matrix v (m a) -> m ()
- generate :: forall (v :: Type -> Type) a. Vector v a => (Int, Int) -> ((Int, Int) -> a) -> Matrix v a
- thaw :: (Matrix m v a, PrimMonad s) => m v a -> s (Mutable m (Mutable v) (PrimState s) a)
- unsafeThaw :: (Matrix m v a, PrimMonad s) => m v a -> s (Mutable m (Mutable v) (PrimState s) a)
- freeze :: (Matrix m v a, PrimMonad s) => Mutable m (Mutable v) (PrimState s) a -> s (m v a)
- unsafeFreeze :: (Matrix m v a, PrimMonad s) => Mutable m (Mutable v) (PrimState s) a -> s (m v a)
- create :: forall m (v :: Type -> Type) a. Matrix m v a => (forall s. ST s (Mutable m (Mutable v) s a)) -> m v a
Immutable Matrix
data Matrix (v :: Type -> Type) a Source #
Row-major matrix supporting efficient slice.
Instances
Accessors
length information
rows :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> Int Source #
Derived methods
Return the number of rows
cols :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> Int Source #
Return the number of columns
Indexing
takeColumn :: Matrix m v a => m v a -> Int -> v a Source #
Extract a row.
takeDiag :: Matrix m v a => m v a -> v a Source #
Extract the diagonal. Default algorithm is O(min(m,n) * O(unsafeIndex)).
Construction
Arguments
:: forall m (v :: Type -> Type) a. Matrix m v a | |
=> Int | number of columns |
-> [a] | row list |
-> m v a |
O(m*n) Matrix construction
fromLists :: forall m (v :: Type -> Type) a. Matrix m v a => [[a]] -> m v a Source #
O(m*n) Create matrix from list of lists, it doesn't check if the list of list is a valid matrix
fromColumns :: Vector v a => [v a] -> Matrix v a Source #
O(m*n) Create matrix from columns
Conversions
toList :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> [a] Source #
O(m*n) Create a list by concatenating rows
toLists :: forall m (v :: Type -> Type) a. Matrix m v a => m v a -> [[a]] Source #
O(m*n) List of lists
Different matrix types
convert :: forall (v :: Type -> Type) a (w :: Type -> Type). (Vector v a, Vector w a) => Matrix v a -> Matrix w a Source #
O(m*n) Convert different matrix type
tr :: forall (v :: Type -> Type) a. Vector v a => Matrix v a -> Matrix v a Source #
O(m*n) Matrix transpose
Arguments
:: forall (v :: Type -> Type) a. Vector v a | |
=> (Int, Int) | upper left corner of the submatrix |
-> (Int, Int) | bottom right corner of the submatrix |
-> Matrix v a | |
-> Matrix v a |
O(1) Extract sub matrix
ident :: forall a (v :: Type -> Type). (Num a, Vector v a) => Int -> Matrix v a Source #
O(m*n) Create an identity matrix
Arguments
:: forall a (v :: Type -> Type) t. (Num a, Vector v a, Foldable t) | |
=> t a | diagonal |
-> Matrix v a |
O(m*n) Create a square matrix with given diagonal, other entries default to 0
Arguments
:: forall (v :: Type -> Type) a t. (Vector v a, Foldable t) | |
=> a | default value |
-> (Int, Int) | |
-> t a | diagonal |
-> Matrix v a |
O(m*n) Create a rectangular matrix with default values and given diagonal
foldl :: forall (v :: Type -> Type) b a. Vector v b => (a -> b -> a) -> a -> Matrix v b -> a Source #
Mapping
map :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b) => (a -> b) -> Matrix v a -> Matrix v b Source #
imap :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b) => ((Int, Int) -> a -> b) -> Matrix v a -> Matrix v b Source #
Monadic mapping
mapM :: forall (v :: Type -> Type) a b m. (Vector v a, Vector v b, Monad m) => (a -> m b) -> Matrix v a -> m (Matrix v b) Source #
imapM :: forall (v :: Type -> Type) a b m. (Vector v a, Vector v b, Monad m) => ((Int, Int) -> a -> m b) -> Matrix v a -> m (Matrix v b) Source #
O(m*n) Apply the monadic action to every element and its index, yielding a matrix of results.
mapM_ :: forall (v :: Type -> Type) a m b. (Vector v a, Monad m) => (a -> m b) -> Matrix v a -> m () Source #
imapM_ :: forall (v :: Type -> Type) a m b. (Vector v a, Monad m) => ((Int, Int) -> a -> m b) -> Matrix v a -> m () Source #
O(m*n) Apply the monadic action to every element and its index, ignoring the results.
forM :: forall (v :: Type -> Type) a b m. (Vector v a, Vector v b, Monad m) => Matrix v a -> (a -> m b) -> m (Matrix v b) Source #
forM_ :: forall (v :: Type -> Type) a m b. (Vector v a, Monad m) => Matrix v a -> (a -> m b) -> m () Source #
Zipping
zipWith :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c) => (a -> b -> c) -> Matrix v a -> Matrix v b -> Matrix v c Source #
zipWith3 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d) => (a -> b -> c -> d) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d Source #
zipWith4 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e) => (a -> b -> c -> d -> e) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e Source #
zipWith5 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f) => (a -> b -> c -> d -> e -> f) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f Source #
zipWith6 :: forall (v :: Type -> Type) a b c d e f g. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v g) => (a -> b -> c -> d -> e -> f -> g) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f -> Matrix v g Source #
izipWith :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c) => ((Int, Int) -> a -> b -> c) -> Matrix v a -> Matrix v b -> Matrix v c Source #
izipWith3 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d) => ((Int, Int) -> a -> b -> c -> d) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d Source #
izipWith4 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e) => ((Int, Int) -> a -> b -> c -> d -> e) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e Source #
izipWith5 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f) => ((Int, Int) -> a -> b -> c -> d -> e -> f) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f Source #
izipWith6 :: forall (v :: Type -> Type) a b c d e f g. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v g) => ((Int, Int) -> a -> b -> c -> d -> e -> f -> g) -> Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f -> Matrix v g Source #
zip :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b, Vector v (a, b)) => Matrix v a -> Matrix v b -> Matrix v (a, b) Source #
zip3 :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c, Vector v (a, b, c)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v (a, b, c) Source #
zip4 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v (a, b, c, d)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v (a, b, c, d) Source #
zip5 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v (a, b, c, d, e)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v (a, b, c, d, e) Source #
zip6 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v (a, b, c, d, e, f)) => Matrix v a -> Matrix v b -> Matrix v c -> Matrix v d -> Matrix v e -> Matrix v f -> Matrix v (a, b, c, d, e, f) Source #
Monadic Zipping
zipWithM :: forall m (v :: Type -> Type) a b c. (Monad m, Vector v a, Vector v b, Vector v c) => (a -> b -> m c) -> Matrix v a -> Matrix v b -> m (Matrix v c) Source #
zipWithM_ :: forall m (v :: Type -> Type) a b c. (Monad m, Vector v a, Vector v b) => (a -> b -> m c) -> Matrix v a -> Matrix v b -> m () Source #
Unzipping
unzip :: forall (v :: Type -> Type) a b. (Vector v a, Vector v b, Vector v (a, b)) => Matrix v (a, b) -> (Matrix v a, Matrix v b) Source #
unzip3 :: forall (v :: Type -> Type) a b c. (Vector v a, Vector v b, Vector v c, Vector v (a, b, c)) => Matrix v (a, b, c) -> (Matrix v a, Matrix v b, Matrix v c) Source #
unzip4 :: forall (v :: Type -> Type) a b c d. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v (a, b, c, d)) => Matrix v (a, b, c, d) -> (Matrix v a, Matrix v b, Matrix v c, Matrix v d) Source #
unzip5 :: forall (v :: Type -> Type) a b c d e. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v (a, b, c, d, e)) => Matrix v (a, b, c, d, e) -> (Matrix v a, Matrix v b, Matrix v c, Matrix v d, Matrix v e) Source #
unzip6 :: forall (v :: Type -> Type) a b c d e f. (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v (a, b, c, d, e, f)) => Matrix v (a, b, c, d, e, f) -> (Matrix v a, Matrix v b, Matrix v c, Matrix v d, Matrix v e, Matrix v f) Source #
Monadic sequencing
sequence :: forall (v :: Type -> Type) a m. (Vector v a, Vector v (m a), Monad m) => Matrix v (m a) -> m (Matrix v a) Source #
sequence_ :: forall (v :: Type -> Type) m a. (Vector v (m a), Monad m) => Matrix v (m a) -> m () Source #
generate :: forall (v :: Type -> Type) a. Vector v a => (Int, Int) -> ((Int, Int) -> a) -> Matrix v a Source #
Mutable matrix
unsafeThaw :: (Matrix m v a, PrimMonad s) => m v a -> s (Mutable m (Mutable v) (PrimState s) a) Source #
freeze :: (Matrix m v a, PrimMonad s) => Mutable m (Mutable v) (PrimState s) a -> s (m v a) Source #