Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module uses the mutable interface to provide an immutable, purely functional interface for matrix computations on the GPU. Because most of these functions are part of the LinAlg interface, there are not documented here.
- data GArr :: Dim -> * -> * where
- type Matrix m n = GArr (M m n)
- type Vector n = GArr (V n)
- data SBool b where
- type family Flip t m n :: Nat
- fromVect :: CNum e => Vect n e -> GArr (V n) e
- toVect :: CNum e => Vector n e -> Vect n e
- fromVects :: Storable a => Vect m (Vect n a) -> GArr (M m n) a
- toVects :: CNum a => Matrix m n a -> Vect m (Vect n a)
- toRows :: CNum e => Matrix m n e -> Vect m (Vector n e)
- toColumns :: CNum e => Matrix m n e -> Vect n (Vector m e)
- fromRows :: CNum e => Vect m (Vector n e) -> GArr (M m n) e
- fromColumns :: CNum e => Vect n (Vector m e) -> GArr (M m n) e
- asColMat :: CNum e => Vec n e -> Matrix n 1 e
- asColVec :: CNum e => Matrix m n e -> Vec (m * n) e
- fromDiag :: CNum e => Vector n e -> Matrix n n e
- takeDiag' :: CNum e => Matrix n n e -> Vector n e
- vAddScale :: CNum e => e -> Vector n e -> Vector n e -> Vector n e
- vscal :: CNum e => e -> Vector n e -> Vector n e
- vplus :: CNum e => Vector n e -> Vector n e -> Vector n e
- vminus :: CNum e => Vector n e -> Vector n e -> Vector n e
- (.*) :: CNum e => e -> Matrix m n e -> Matrix m n e
- (.+) :: CNum e => Matrix m n e -> Matrix m n e -> Matrix m n e
- (.-) :: CNum e => Matrix m n e -> Matrix m n e -> Matrix m n e
- mXv :: CNum e => Matrix m n e -> Vector n e -> Vector m e
- vXm :: CNum e => Vector n e -> Matrix n m e -> Vector m e
- mXm :: CNum e => Matrix m n e -> Matrix n p e -> Matrix m p e
- mdim :: Matrix m n a -> (SNat m, SNat n)
- mrows :: Matrix m n a -> SNat m
- mcols :: Matrix m n a -> SNat n
- len :: VecP s n a -> SNat n
- trans :: Matrix m n a -> Matrix n m a
- ident :: CNum e => SNat n -> Matrix n n e
- outer :: CNum e => Vec m e -> Vec n e -> Matrix m n e
- elementwiseProdV :: CNum e => Vector n e -> Vector n e -> Vector n e
- elementwiseProdM :: CNum e => Matrix m n e -> Matrix m n e -> Matrix m n e
- genSolveV :: CNum e => Matrix n n e -> Vector n e -> Vector n e
- genSolveM :: CNum e => Matrix n n e -> Matrix n p e -> Matrix n p e
- tSolveV :: CNum e => FillMode -> Matrix n n e -> Vec n e -> Vec n e
- tSolveM :: CNum e => FillMode -> SideMode -> Matrix n n e -> Matrix m p e -> Matrix m p e
- (^\) :: CNum e => Matrix n n e -> Matrix n p e -> Matrix n p e
- (.\) :: CNum e => Matrix n n e -> Matrix n p e -> Matrix n p e
- chol :: CNum e => Matrix n n e -> Matrix n n e
- constant :: CNum a => a -> SNat n -> Vector n a
- constantM :: CNum a => a -> (SNat m, SNat n) -> Matrix m n a
- trsymprod :: CNum e => Matrix n n e -> Matrix n n e -> e
Data types
data GArr :: Dim -> * -> * where
An immutable matrix datatype with a transpose flag, so we can avoid unnecessary transposition.
LinAlg operations
Data transfer
fromVects :: Storable a => Vect m (Vect n a) -> GArr (M m n) a
In line with the LinAlg specification, this function accepts input in row-major format.
toVects :: CNum a => Matrix m n a -> Vect m (Vect n a)
Converts a matrix to a list of lists in row-major format.
Addition and scalar multiplication
Multiplication
Core operations
elementwiseProdV :: CNum e => Vector n e -> Vector n e -> Vector n e
elementwiseProdM :: CNum e => Matrix m n e -> Matrix m n e -> Matrix m n e
Solving linear systems
tSolveM :: CNum e => FillMode -> SideMode -> Matrix n n e -> Matrix m p e -> Matrix m p e
Solution of a triangular system. XXX: make the type more specific
chol :: CNum e => Matrix n n e -> Matrix n n e
Cholesky decomposition. Important Note: The entries above the diagonal are *not* zeroed out, so be careful!