Copyright | (c) Artem Chirkin |
---|---|
License | MIT |
Maintainer | chirkin@arch.ethz.ch |
Safe Haskell | None |
Language | Haskell2010 |
This module generalizes matrices and vectors. Yet it is limited to rank 2, allowing for a simple and nicely type-checked interface.
- data Tensor t n m
- fill :: MatrixCalculus t n m (Tensor t n m) => Tensor t 1 1 -> Tensor t n m
- prod :: MatrixProduct (Tensor t n m) (Tensor t m k) (Tensor t n k) => Tensor t n m -> Tensor t m k -> Tensor t n k
- (%*) :: MatrixProduct (Tensor t n m) (Tensor t m k) (Tensor t n k) => Tensor t n m -> Tensor t m k -> Tensor t n k
- inverse :: MatrixInverse (Tensor t n n) => Tensor t n n -> Tensor t n n
- transpose :: (MatrixCalculus t n m (Tensor t n m), MatrixCalculus t m n (Tensor t m n), PrimBytes (Tensor t m n)) => Tensor t n m -> Tensor t m n
- (<:>) :: (PrimBytes (Tensor t k n), PrimBytes (Tensor t k m), PrimBytes (Tensor t k (n + m))) => Tensor t k n -> Tensor t k m -> Tensor t k (n + m)
- (//) :: (MatrixProduct (Tensor t n m) (Tensor t m m) (Tensor t n m), MatrixInverse (TT t m m)) => Tensor t n m -> Tensor t m m -> Tensor t n m
- (\\) :: (MatrixProduct (Tensor t n n) (Tensor t n m) (Tensor t n m), MatrixInverse (TT t n n)) => Tensor t n n -> Tensor t n m -> Tensor t n m
- index :: MatrixCalculus t n m (Tensor t n m) => Int -> Int -> Tensor t n m -> Tensor t 1 1
- indexCol :: (MatrixCalculus t n m (Tensor t n m), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Int -> Tensor t n m -> Tensor t n 1
- indexRow :: (MatrixCalculus t n m (Tensor t n m), VectorCalculus t m (Tensor t 1 m), PrimBytes (Tensor t 1 m)) => Int -> Tensor t n m -> Tensor t 1 m
- dimN :: MatrixCalculus t n m (Tensor t n m) => Tensor t n m -> Int
- dimM :: MatrixCalculus t n m (Tensor t n m) => Tensor t n m -> Int
- (.*.) :: VectorCalculus t n v => v -> v -> v
- dot :: VectorCalculus t n v => v -> v -> Tensor t 1 1
- · :: VectorCalculus t n v => v -> v -> Tensor t 1 1
- normL1 :: VectorCalculus t n v => v -> Tensor t 1 1
- normL2 :: VectorCalculus t n v => v -> Tensor t 1 1
- normLPInf :: VectorCalculus t n v => v -> Tensor t 1 1
- normLNInf :: VectorCalculus t n v => v -> Tensor t 1 1
- normLP :: VectorCalculus t n v => Int -> v -> Tensor t 1 1
- eye :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n
- diag :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t 1 1 -> Tensor t n n
- det :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n -> Tensor t 1 1
- trace :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n -> Tensor t 1 1
- toDiag :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Tensor t n 1 -> Tensor t n n
- toDiag' :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t 1 n), PrimBytes (Tensor t 1 n)) => Tensor t 1 n -> Tensor t n n
- fromDiag :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Tensor t n n -> Tensor t n 1
- fromDiag' :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t 1 n), PrimBytes (Tensor t 1 n)) => Tensor t n n -> Tensor t 1 n
- type Mat t n m = Tensor t n m
- type Vec t n = Tensor t n 1
- type Vec' t m = Tensor t 1 m
- type Vec2f = Tensor Float 2 1
- type Vec3f = Tensor Float 3 1
- type Vec4f = Tensor Float 4 1
- type Vec2f' = Tensor Float 1 2
- type Vec3f' = Tensor Float 1 3
- type Vec4f' = Tensor Float 1 4
- type Mat22f = Tensor Float 2 2
- type Mat23f = Tensor Float 2 3
- type Mat24f = Tensor Float 2 4
- type Mat32f = Tensor Float 3 2
- type Mat33f = Tensor Float 3 3
- type Mat34f = Tensor Float 3 4
- type Mat42f = Tensor Float 4 2
- type Mat43f = Tensor Float 4 3
- type Mat44f = Tensor Float 4 4
- scalar :: t -> Tensor t 1 1
- vec2 :: Vector2D t => t -> t -> Tensor t 2 1
- vec3 :: Vector3D t => t -> t -> t -> Tensor t 3 1
- vec4 :: Vector4D t => t -> t -> t -> t -> Tensor t 4 1
- vec2' :: Vector2D t => t -> t -> Tensor t 1 2
- vec3' :: Vector3D t => t -> t -> t -> Tensor t 1 3
- vec4' :: Vector4D t => t -> t -> t -> t -> Tensor t 1 4
- mat22 :: Matrix2x2 t => Tensor t 2 1 -> Tensor t 2 1 -> Tensor t 2 2
- mat33 :: (PrimBytes (Tensor t 3 3), PrimBytes (Tensor t 3 2), PrimBytes (Tensor t 3 1)) => Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 3
- mat44 :: (PrimBytes (Tensor t 4 4), PrimBytes (Tensor t 4 3), PrimBytes (Tensor t 4 2), PrimBytes (Tensor t 4 1)) => Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 4
- det2 :: Vector2D t => Tensor t 2 1 -> Tensor t 2 1 -> Tensor t 1 1
- det2' :: Vector2D t => Tensor t 1 2 -> Tensor t 1 2 -> Tensor t 1 1
- cross :: Vector3D t => Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 1
- (×) :: Vector3D t => Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 1
Documentation
Eq (TT t n m) => Eq (Tensor t n m) Source # | |
Floating (TT t n m) => Floating (Tensor t n m) Source # | |
Fractional (TT t n m) => Fractional (Tensor t n m) Source # | |
Num (TT t n m) => Num (Tensor t n m) Source # | |
Ord (TT t n m) => Ord (Tensor t n m) Source # | |
Show (TT t n m) => Show (Tensor t n m) Source # | |
WordBytes (TT t n m) => WordBytes (Tensor t n m) Source # | |
IntBytes (TT t n m) => IntBytes (Tensor t n m) Source # | |
DoubleBytes (TT t n m) => DoubleBytes (Tensor t n m) Source # | |
FloatBytes (TT t n m) => FloatBytes (Tensor t n m) Source # | |
PrimBytes (TT t n m) => PrimBytes (Tensor t n m) Source # | |
Common operations
fill :: MatrixCalculus t n m (Tensor t n m) => Tensor t 1 1 -> Tensor t n m Source #
Fill whole tensor with a single value
prod :: MatrixProduct (Tensor t n m) (Tensor t m k) (Tensor t n k) => Tensor t n m -> Tensor t m k -> Tensor t n k Source #
Matrix product for tensors rank 2, as well matrix-vector or vector-matrix products
(%*) :: MatrixProduct (Tensor t n m) (Tensor t m k) (Tensor t n k) => Tensor t n m -> Tensor t m k -> Tensor t n k infixl 7 Source #
Matrix product for tensors rank 2, as well matrix-vector or vector-matrix products
transpose :: (MatrixCalculus t n m (Tensor t n m), MatrixCalculus t m n (Tensor t m n), PrimBytes (Tensor t m n)) => Tensor t n m -> Tensor t m n Source #
(<:>) :: (PrimBytes (Tensor t k n), PrimBytes (Tensor t k m), PrimBytes (Tensor t k (n + m))) => Tensor t k n -> Tensor t k m -> Tensor t k (n + m) infixl 5 Source #
Append one vector to another, adding up their dimensionality
(//) :: (MatrixProduct (Tensor t n m) (Tensor t m m) (Tensor t n m), MatrixInverse (TT t m m)) => Tensor t n m -> Tensor t m m -> Tensor t n m Source #
Divide on the right: R = A * B^(-1)
(\\) :: (MatrixProduct (Tensor t n n) (Tensor t n m) (Tensor t n m), MatrixInverse (TT t n n)) => Tensor t n n -> Tensor t n m -> Tensor t n m Source #
Divide on the left: R = A^(-1) * b
index :: MatrixCalculus t n m (Tensor t n m) => Int -> Int -> Tensor t n m -> Tensor t 1 1 Source #
Get an element of a tensor
indexCol :: (MatrixCalculus t n m (Tensor t n m), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Int -> Tensor t n m -> Tensor t n 1 Source #
Get a column vector of a matrix
indexRow :: (MatrixCalculus t n m (Tensor t n m), VectorCalculus t m (Tensor t 1 m), PrimBytes (Tensor t 1 m)) => Int -> Tensor t n m -> Tensor t 1 m Source #
Get a row vector of a matrix
(.*.) :: VectorCalculus t n v => v -> v -> v Source #
Scalar product -- sum of Vecs' components products, propagated into whole Vec
eye :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n Source #
Identity matrix. Mat with 1 on diagonal and 0 elsewhere
diag :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t 1 1 -> Tensor t n n Source #
Put the same value on the Mat diagonal, 0 otherwise
det :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n -> Tensor t 1 1 Source #
Determinant of Mat
trace :: SquareMatrixCalculus t n (Tensor t n n) => Tensor t n n -> Tensor t 1 1 Source #
Sum of diagonal elements
toDiag :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Tensor t n 1 -> Tensor t n n Source #
Set Vec values into the diagonal elements of Mat
toDiag' :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t 1 n), PrimBytes (Tensor t 1 n)) => Tensor t 1 n -> Tensor t n n Source #
Set Vec values into the diagonal elements of Mat
fromDiag :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t n 1), PrimBytes (Tensor t n 1)) => Tensor t n n -> Tensor t n 1 Source #
Get the diagonal elements from Mat into Vec
fromDiag' :: (SquareMatrixCalculus t n (Tensor t n n), VectorCalculus t n (Tensor t 1 n), PrimBytes (Tensor t 1 n)) => Tensor t n n -> Tensor t 1 n Source #
Get the diagonal elements from Mat into Vec
Type abbreviations
Simplified type constructors
mat33 :: (PrimBytes (Tensor t 3 3), PrimBytes (Tensor t 3 2), PrimBytes (Tensor t 3 1)) => Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 1 -> Tensor t 3 3 Source #
Compose a 3x3D matrix
mat44 :: (PrimBytes (Tensor t 4 4), PrimBytes (Tensor t 4 3), PrimBytes (Tensor t 4 2), PrimBytes (Tensor t 4 1)) => Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 1 -> Tensor t 4 4 Source #
Compose a 4x4D matrix