matrix-sized-0.1.1: Haskell matrix library with interface to C++ linear algebra libraries.

Safe HaskellNone
LanguageHaskell2010

Data.Matrix.Static.Dense

Contents

Synopsis

Immutable Matrix

data Matrix :: MatrixKind where Source #

Column-major matrix

Constructors

Matrix :: (SingI r, SingI c) => v a -> Matrix r c v a 
Instances
Factorization Matrix Source # 
Instance details

Defined in Data.Matrix.Static.LinearAlgebra

Methods

eigS :: (SingI k, SingI n, k <= (n - 2)) => Sing k -> Matrix n n Vector Double -> (Matrix0 k 1 (Complex Double), Matrix0 n k (Complex Double)) Source #

eigSH :: (SingI k, SingI n, k <= (n - 1)) => Sing k -> Matrix n n Vector Double -> (Matrix0 k 1 Double, Matrix0 n k Double) Source #

cholesky :: (Numeric a, SingI n) => Matrix n n Vector a -> Matrix n n Vector a Source #

LinearAlgebra Matrix Source # 
Instance details

Defined in Data.Matrix.Static.LinearAlgebra

Methods

ident :: (Numeric a, SingI n) => Matrix n n Vector a Source #

colSum :: (Numeric a, SingI n, Matrix0 Matrix Vector a) => Matrix m n Vector a -> Matrix1 1 n a Source #

rowSum :: (Numeric a, SingI m, Matrix0 Matrix Vector a) => Matrix m n Vector a -> Matrix1 m 1 a Source #

Arithmetic Matrix Matrix Source # 
Instance details

Defined in Data.Matrix.Static.LinearAlgebra

Methods

(@@) :: (Numeric a, SingI n, SingI m, If (Matrix == Matrix) Matrix Matrix ~ mat3) => Matrix n p Vector a -> Matrix p m Vector a -> mat3 n m Vector a Source #

(%+%) :: (Numeric a, SingI n, SingI m, If (Matrix == Matrix) Matrix Matrix ~ mat3) => Matrix n m Vector a -> Matrix n m Vector a -> mat3 n m Vector a Source #

(%-%) :: (Numeric a, SingI n, SingI m, If (Matrix == Matrix) Matrix Matrix ~ mat3) => Matrix n m Vector a -> Matrix n m Vector a -> mat3 n m Vector a Source #

(%*%) :: (Numeric a, SingI n, SingI m, If (Matrix == Matrix) Matrix SparseMatrix ~ mat3) => Matrix n m Vector a -> Matrix n m Vector a -> mat3 n m Vector a Source #

Arithmetic Matrix SparseMatrix Source # 
Instance details

Defined in Data.Matrix.Static.LinearAlgebra

Methods

(@@) :: (Numeric a, SingI n, SingI m, If (Matrix == SparseMatrix) Matrix Matrix ~ mat3) => Matrix n p Vector a -> SparseMatrix p m Vector a -> mat3 n m Vector a Source #

(%+%) :: (Numeric a, SingI n, SingI m, If (Matrix == SparseMatrix) Matrix Matrix ~ mat3) => Matrix n m Vector a -> SparseMatrix n m Vector a -> mat3 n m Vector a Source #

(%-%) :: (Numeric a, SingI n, SingI m, If (Matrix == SparseMatrix) Matrix Matrix ~ mat3) => Matrix n m Vector a -> SparseMatrix n m Vector a -> mat3 n m Vector a Source #

(%*%) :: (Numeric a, SingI n, SingI m, If (Matrix == SparseMatrix) Matrix SparseMatrix ~ mat3) => Matrix n m Vector a -> SparseMatrix n m Vector a -> mat3 n m Vector a Source #

Arithmetic SparseMatrix Matrix Source # 
Instance details

Defined in Data.Matrix.Static.LinearAlgebra

Methods

(@@) :: (Numeric a, SingI n, SingI m, If (SparseMatrix == Matrix) SparseMatrix Matrix ~ mat3) => SparseMatrix n p Vector a -> Matrix p m Vector a -> mat3 n m Vector a Source #

(%+%) :: (Numeric a, SingI n, SingI m, If (SparseMatrix == Matrix) SparseMatrix Matrix ~ mat3) => SparseMatrix n m Vector a -> Matrix n m Vector a -> mat3 n m Vector a Source #

(%-%) :: (Numeric a, SingI n, SingI m, If (SparseMatrix == Matrix) SparseMatrix Matrix ~ mat3) => SparseMatrix n m Vector a -> Matrix n m Vector a -> mat3 n m Vector a Source #

(%*%) :: (Numeric a, SingI n, SingI m, If (SparseMatrix == Matrix) SparseMatrix SparseMatrix ~ mat3) => SparseMatrix n m Vector a -> Matrix n m Vector a -> mat3 n m Vector a Source #

Vector v a => Matrix Matrix v a Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Methods

dim :: Matrix r c v a -> (Int, Int) Source #

unsafeIndex :: Matrix r c v a -> (Int, Int) -> a Source #

unsafeFromVector :: (SingI r, SingI c) => v a -> Matrix r c v a Source #

flatten :: Matrix r c v a -> v a Source #

unsafeTakeRow :: Matrix r c v a -> Int -> v a Source #

unsafeTakeColumn :: Matrix r c v a -> Int -> v a Source #

takeDiag :: Matrix r c v a -> v a Source #

transpose :: (SingI r, SingI c) => Matrix r c v a -> Matrix c r v a Source #

thaw :: PrimMonad s => Matrix r c v a -> s (Mutable Matrix r c (Mutable v) (PrimState s) a) Source #

unsafeThaw :: PrimMonad s => Matrix r c v a -> s (Mutable Matrix r c (Mutable v) (PrimState s) a) Source #

freeze :: PrimMonad s => Mutable Matrix r c (Mutable v) (PrimState s) a -> s (Matrix r c v a) Source #

unsafeFreeze :: PrimMonad s => Mutable Matrix r c (Mutable v) (PrimState s) a -> s (Matrix r c v a) Source #

map :: Vector v b => (a -> b) -> Matrix r c v a -> Matrix r c v b Source #

imap :: Vector v b => ((Int, Int) -> a -> b) -> Matrix r c v a -> Matrix r c v b Source #

imapM_ :: (Monad monad, Matrix0 Matrix v a) => ((Int, Int) -> a -> monad b) -> Matrix r c v a -> monad () Source #

sequence :: (Vector v (monad a), Monad monad) => Matrix r c v (monad a) -> monad (Matrix r c v a) Source #

sequence_ :: (Vector v (monad a), Monad monad) => Matrix r c v (monad a) -> monad () Source #

(Vector v a, Eq (v a)) => Eq (Matrix r c v a) Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Methods

(==) :: Matrix r c v a -> Matrix r c v a -> Bool #

(/=) :: Matrix r c v a -> Matrix r c v a -> Bool #

(SingI r, SingI c, Vector v a, Fractional a) => Fractional (Matrix r c v a) Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Methods

(/) :: Matrix r c v a -> Matrix r c v a -> Matrix r c v a #

recip :: Matrix r c v a -> Matrix r c v a #

fromRational :: Rational -> Matrix r c v a #

(SingI r, SingI c, Vector v a, Num a) => Num (Matrix r c v a) Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Methods

(+) :: Matrix r c v a -> Matrix r c v a -> Matrix r c v a #

(-) :: Matrix r c v a -> Matrix r c v a -> Matrix r c v a #

(*) :: Matrix r c v a -> Matrix r c v a -> Matrix r c v a #

negate :: Matrix r c v a -> Matrix r c v a #

abs :: Matrix r c v a -> Matrix r c v a #

signum :: Matrix r c v a -> Matrix r c v a #

fromInteger :: Integer -> Matrix r c v a #

(Vector v a, Show a) => Show (Matrix r c v a) Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Methods

showsPrec :: Int -> Matrix r c v a -> ShowS #

show :: Matrix r c v a -> String #

showList :: [Matrix r c v a] -> ShowS #

(Vector v a, Store (v a), SingI r, SingI c) => Store (Matrix r c v a) Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Methods

size :: Size (Matrix r c v a)

poke :: Matrix r c v a -> Poke ()

peek :: Peek (Matrix r c v a)

type Mutable Matrix Source # 
Instance details

Defined in Data.Matrix.Static.Dense

Accessors

length information

dim :: Matrix mat v a => mat r c v a -> (Int, Int) Source #

rows :: Matrix m v a => m r c v a -> Int Source #

Derived methods

Return the number of rows

cols :: Matrix m v a => m r c v a -> Int Source #

Return the number of columns

Query

(!) :: forall m r c v a i j. (Matrix m v a, i <= r, j <= c) => m r c v a -> (Sing i, Sing j) -> a Source #

Indexing

takeRow :: forall m r c v a i. (i <= r, SingI i, Matrix m v a) => m r c v a -> Sing i -> v a Source #

Extract a row.

takeColumn :: forall m r c v a j. (j <= c, SingI j, Matrix m v a) => m r c v a -> Sing j -> v a Source #

Extract a row.

takeDiag :: Matrix mat v a => mat r c v a -> v a Source #

Extract the diagonal. Default algorithm is O(min(m,n) * O(unsafeIndex)).

Unsafe Query

unsafeIndex :: Matrix mat v a => mat r c v a -> (Int, Int) -> a Source #

unsafeTakeRow :: Matrix mat v a => mat r c v a -> Int -> v a Source #

Extract a row. Default algorithm is O(n * O(unsafeIndex)).

unsafeTakeColumn :: Matrix mat v a => mat r c v a -> Int -> v a Source #

Extract a column. Default algorithm is O(m * O(unsafeIndex)).

Construction

empty :: Matrix m v a => m 0 0 v a Source #

matrix :: (SingI r, SingI c, Matrix m v a) => [[a]] -> m r c v a Source #

fromVector :: forall m r c v a. (SingI r, SingI c, Matrix m v a) => v a -> m r c v a Source #

Construct matrix from a vector containg columns.

fromList :: (SingI r, SingI c, Matrix m v a) => [a] -> m r c v a Source #

Construct matrix from a list containg columns.

fromRows :: (Matrix m v a, SingI r, SingI c) => [v a] -> m r c v a Source #

O(m*n) Create matrix from rows

fromColumns :: (Matrix m v a, SingI r, SingI c) => [v a] -> m r c v a Source #

O(m*n) Create matrix from columns

unsafeFromVector :: (Matrix mat v a, SingI r, SingI c) => v a -> mat r c v a Source #

replicate :: forall r c v a. (Vector v a, SingI r, SingI c) => a -> Matrix r c v a Source #

O(m*n) Create a constant matrix.

diag Source #

Arguments

:: (Vector v a, SingI n) 
=> a

default value

-> Matrix n 1 v a

diagonal

-> Matrix n n v a 

O(m*n) Create a square matrix with default values and given diagonal

diagRect Source #

Arguments

:: (Vector v a, SingI r, SingI c, n <= r, n <= c) 
=> a

default value

-> Matrix n 1 v a

diagonal

-> Matrix r c v a 

O(m*n) Create a rectangular matrix with default values and given diagonal

Conversions

flatten :: Matrix mat v a => mat r c v a -> v a Source #

Convert matrix to vector in column order. Default algorithm is O((m*n) * O(unsafeIndex)).

toRows :: Matrix m v a => m r c v a -> [v a] Source #

O(m) Return the rows

toColumns :: Matrix m v a => m r c v a -> [v a] Source #

O(m*n) Return the columns

toList :: Matrix m v a => m r c v a -> [a] Source #

O(m*n) Create a list by concatenating columns

Conversion between Different matrix types

convert :: (Vector v a, Vector w a) => Matrix r c v a -> Matrix r c w a Source #

O(m*n) Convert different matrix type

convertAny :: (Matrix m1 v1 a, Matrix m2 v2 a, SingI r, SingI c) => m1 r c v1 a -> m2 r c v2 a Source #

O(m*n) Convert to any type of matrix.

transpose :: (Matrix mat v a, SingI r, SingI c) => mat r c v a -> mat c r v a Source #

map :: (Matrix mat v a, Vector v b) => (a -> b) -> mat r c v a -> mat r c v b Source #

mapM :: (Vector v (monad b), Monad monad, Matrix mat v a, Matrix mat v b) => (a -> monad b) -> mat r c v a -> monad (mat r c v b) Source #

imap :: (Matrix mat v a, Vector v b) => ((Int, Int) -> a -> b) -> mat r c v a -> mat r c v b Source #

imapM :: (Vector v (monad b), Monad monad, Matrix mat v a, Matrix mat v b) => ((Int, Int) -> a -> monad b) -> mat r c v a -> monad (mat r c v b) Source #

Zipping

zip :: (SingI n, SingI m, Vector v a, Vector v b, Vector v (a, b)) => Matrix n m v a -> Matrix n m v b -> Matrix n m v (a, b) Source #

zip3 :: (SingI n, SingI m, Vector v a, Vector v b, Vector v c, Vector v (a, b, c)) => Matrix n m v a -> Matrix n m v b -> Matrix n m v c -> Matrix n m v (a, b, c) Source #

zipWith :: (Vector v a, Vector v b, Vector v c, SingI n, SingI m) => (a -> b -> c) -> Matrix n m v a -> Matrix n m v b -> Matrix n m v c Source #

zipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d, SingI n, SingI m) => (a -> b -> c -> d) -> Matrix n m v a -> Matrix n m v b -> Matrix n m v c -> Matrix n m v d Source #

zipWith4 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, SingI n, SingI m) => (a -> b -> c -> d -> e) -> Matrix n m v a -> Matrix n m v b -> Matrix n m v c -> Matrix n m v d -> Matrix n m v e Source #

zipWith5 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, SingI n, SingI m) => (a -> b -> c -> d -> e -> f) -> Matrix n m v a -> Matrix n m v b -> Matrix n m v c -> Matrix n m v d -> Matrix n m v e -> Matrix n m v f Source #

zipWith6 :: (Vector v a, Vector v b, Vector v c, Vector v d, Vector v e, Vector v f, Vector v g, SingI n, SingI m) => (a -> b -> c -> d -> e -> f -> g) -> Matrix n m v a -> Matrix n m v b -> Matrix n m v c -> Matrix n m v d -> Matrix n m v e -> Matrix n m v f -> Matrix n m v g Source #

izipWith :: (Vector v a, Vector v b, Vector v c, SingI n, SingI m) => ((Int, Int) -> a -> b -> c) -> Matrix n m v a -> Matrix n m v b -> Matrix n m v c Source #

izipWith3 :: (Vector v a, Vector v b, Vector v c, Vector v d, SingI n, SingI m) => ((Int, Int) -> a -> b -> c -> d) -> Matrix n m v a -> Matrix n m v b -> Matrix n m v c -> Matrix n m v d Source #

Monadic Zipping

zipWithM :: (Vector v a, Vector v b, Vector v c, Monad monad, SingI n, SingI m) => (a -> b -> monad c) -> Matrix n m v a -> Matrix n m v b -> monad (Matrix n m v c) Source #

zipWithM_ :: (Vector v a, Vector v b, Vector v c, Monad monad) => (a -> b -> monad c) -> Matrix n m v a -> Matrix n m v b -> monad () Source #

Unzipping

unzip :: (Vector v a, Vector v b, Vector v (a, b), SingI n, SingI m) => Matrix n m v (a, b) -> (Matrix n m v a, Matrix n m v b) Source #

unzip3 :: (Vector v a, Vector v b, Vector v c, Vector v (a, b, c), SingI n, SingI m) => Matrix n m v (a, b, c) -> (Matrix n m v a, Matrix n m v b, Matrix n m v c) Source #

generate :: forall r c v a. (Vector v a, SingI r, SingI c) => ((Int, Int) -> a) -> Matrix r c v a Source #

Mutable matrix

thaw :: (Matrix mat v a, PrimMonad s) => mat r c v a -> s (Mutable mat r c (Mutable v) (PrimState s) a) Source #

unsafeThaw :: (Matrix mat v a, PrimMonad s) => mat r c v a -> s (Mutable mat r c (Mutable v) (PrimState s) a) Source #

freeze :: (Matrix mat v a, PrimMonad s) => Mutable mat r c (Mutable v) (PrimState s) a -> s (mat r c v a) Source #

unsafeFreeze :: (Matrix mat v a, PrimMonad s) => Mutable mat r c (Mutable v) (PrimState s) a -> s (mat r c v a) Source #

create :: Matrix m v a => (forall s. ST s (Mutable m r c (Mutable v) s a)) -> m r c v a Source #

sum :: (Num a, Vector v a) => Matrix r c v a -> a Source #

all :: Vector v a => (a -> Bool) -> Matrix r c v a -> Bool Source #

any :: Vector v a => (a -> Bool) -> Matrix r c v a -> Bool Source #