Copyright | 2011 Aleksey Khudyakov 2014 Bryan O'Sullivan |
---|---|
License | BSD3 |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Basic matrix operations.
There isn't a widely used matrix package for Haskell yet, so we implement the necessary minimum here.
Synopsis
- data Matrix = Matrix {}
- type Vector = Vector Double
- fromVector :: Int -> Int -> Vector Double -> Matrix
- fromList :: Int -> Int -> [Double] -> Matrix
- fromRowLists :: [[Double]] -> Matrix
- fromRows :: [Vector] -> Matrix
- fromColumns :: [Vector] -> Matrix
- toVector :: Matrix -> Vector Double
- toList :: Matrix -> [Double]
- toRows :: Matrix -> [Vector]
- toColumns :: Matrix -> [Vector]
- toRowLists :: Matrix -> [[Double]]
- generate :: Int -> Int -> (Int -> Int -> Double) -> Matrix
- generateSym :: Int -> (Int -> Int -> Double) -> Matrix
- ident :: Int -> Matrix
- diag :: Vector -> Matrix
- dimension :: Matrix -> (Int, Int)
- center :: Matrix -> Double
- multiply :: Matrix -> Matrix -> Matrix
- multiplyV :: Matrix -> Vector -> Vector
- transpose :: Matrix -> Matrix
- power :: Matrix -> Int -> Matrix
- norm :: Vector -> Double
- column :: Matrix -> Int -> Vector
- row :: Matrix -> Int -> Vector
- map :: (Double -> Double) -> Matrix -> Matrix
- for :: Monad m => Int -> Int -> (Int -> m ()) -> m ()
- unsafeIndex :: Matrix -> Int -> Int -> Double
- hasNaN :: Matrix -> Bool
- bounds :: (Vector -> Int -> r) -> Matrix -> Int -> Int -> r
- unsafeBounds :: (Vector -> Int -> r) -> Matrix -> Int -> Int -> r
Data types
Two-dimensional matrix, stored in row-major order.
Conversion fromto listsvectors
:: Int | Number of rows. |
-> Int | Number of columns. |
-> Vector Double | Flat list of values, in row-major order. |
-> Matrix |
Convert from a row-major vector.
:: Int | Number of rows. |
-> Int | Number of columns. |
-> [Double] | Flat list of values, in row-major order. |
-> Matrix |
Convert from a row-major list.
fromRowLists :: [[Double]] -> Matrix Source #
create a matrix from a list of lists, as rows
fromColumns :: [Vector] -> Matrix Source #
create a matrix from a list of vectors, as columns
toRowLists :: Matrix -> [[Double]] Source #
Convert to a list of lists, as rows
Other
:: Int | Number of rows |
-> Int | Number of columns |
-> (Int -> Int -> Double) | Function which takes row and column as argument. |
-> Matrix |
Generate matrix using function
:: Int | Number of rows and columns |
-> (Int -> Int -> Double) | Function which takes row and column as argument. It must
be symmetric in arguments: |
-> Matrix |
Generate symmetric square matrix using function
diag :: Vector -> Matrix Source #
Create a square matrix with given diagonal, other entries default to 0
dimension :: Matrix -> (Int, Int) Source #
Return the dimensions of this matrix, as a (row,column) pair.
multiply :: Matrix -> Matrix -> Matrix Source #
Matrix-matrix multiplication. Matrices must be of compatible sizes (note: not checked).
power :: Matrix -> Int -> Matrix Source #
Raise matrix to nth power. Power must be positive (/note: not checked).
for :: Monad m => Int -> Int -> (Int -> m ()) -> m () Source #
Simple for loop. Counts from start to end-1.