Safe Haskell | Safe |
---|---|
Language | Haskell2010 |
- data SpMatrix a = SM {}
- sizeStr :: SpMatrix a -> String
- zeroSM :: Rows -> Cols -> SpMatrix a
- mkDiagonal :: Int -> [a] -> SpMatrix a
- eye :: Num a => Int -> SpMatrix a
- permutationSM :: Num a => Int -> [IxRow] -> SpMatrix a
- permutPairsSM :: Num a => Int -> [(IxRow, IxRow)] -> SpMatrix a
- mkSubDiagonal :: Int -> Int -> [a] -> SpMatrix a
- insertSpMatrix :: IxRow -> IxCol -> a -> SpMatrix a -> SpMatrix a
- fromListSM' :: Foldable t => t (IxRow, IxCol, a) -> SpMatrix a -> SpMatrix a
- fromListSM :: Foldable t => (Int, Int) -> t (IxRow, IxCol, a) -> SpMatrix a
- fromListDenseSM :: Int -> [a] -> SpMatrix a
- toDenseListSM :: Num t => SpMatrix t -> [(IxRow, IxCol, t)]
- lookupSM :: SpMatrix a -> IxRow -> IxCol -> Maybe a
- lookupWD_SM :: Num a => SpMatrix a -> (IxRow, IxCol) -> a
- (@@!) :: Num a => SpMatrix a -> (IxRow, IxCol) -> a
- (@@) :: Num a => SpMatrix a -> (IxRow, IxCol) -> a
- lookupWD_IM :: Num a => IntMap (IntMap a) -> (IxRow, IxCol) -> a
- filterSM :: (Key -> Key -> a -> Bool) -> SpMatrix a -> SpMatrix a
- extractDiag :: SpMatrix a -> SpMatrix a
- extractSuperDiag :: SpMatrix a -> SpMatrix a
- extractSubDiag :: SpMatrix a -> SpMatrix a
- extractSubmatrixSM :: (Key -> Key) -> (Key -> Key) -> SpMatrix a -> (IxRow, IxRow) -> (IxCol, IxCol) -> SpMatrix a
- extractSubmatrixRebalanceKeys :: SpMatrix a -> (IxRow, IxRow) -> (IxCol, IxCol) -> SpMatrix a
- extractSubmatrix :: SpMatrix a -> (IxRow, IxRow) -> (IxCol, IxCol) -> SpMatrix a
- extractRowSM :: SpMatrix a -> IxRow -> SpMatrix a
- extractSubRowSM :: SpMatrix a -> IxRow -> (IxCol, IxCol) -> SpMatrix a
- extractSubRowSM_RK :: SpMatrix a -> IxRow -> (IxCol, IxCol) -> SpMatrix a
- extractColSM :: SpMatrix a -> IxCol -> SpMatrix a
- extractSubColSM :: SpMatrix a -> IxCol -> (IxRow, IxRow) -> SpMatrix a
- extractSubColSM_RK :: SpMatrix a -> IxCol -> (IxRow, IxRow) -> SpMatrix a
- isValidIxSM :: SpMatrix a -> (Int, Int) -> Bool
- isSquareSM :: SpMatrix a -> Bool
- isDiagonalSM :: SpMatrix a -> Bool
- isOrthogonalSM :: SpMatrix Double -> Bool
- immSM :: SpMatrix t -> IntMap (IntMap t)
- dimSM :: SpMatrix t -> (Rows, Cols)
- nelSM :: SpMatrix t -> Int
- nrows :: SpMatrix a -> Rows
- ncols :: SpMatrix a -> Cols
- data SMInfo = SMInfo {}
- infoSM :: SpMatrix a -> SMInfo
- nzSM :: SpMatrix a -> Int
- spySM :: Fractional b => SpMatrix a -> b
- nzRow :: SpMatrix a -> Key -> Int
- bwMinSM :: SpMatrix a -> Int
- bwMaxSM :: SpMatrix a -> Int
- bwBoundsSM :: SpMatrix a -> (Int, Int)
- vertStackSM :: SpMatrix a -> SpMatrix a -> SpMatrix a
- (-=-) :: SpMatrix a -> SpMatrix a -> SpMatrix a
- horizStackSM :: SpMatrix a -> SpMatrix a -> SpMatrix a
- (-||-) :: SpMatrix a -> SpMatrix a -> SpMatrix a
- foldlSM :: (a -> b -> b) -> b -> SpMatrix a -> b
- ifoldlSM :: (Key -> Key -> a -> b -> b) -> b -> SpMatrix a -> b
- countSubdiagonalNZSM :: SpMatrix a -> Int
- subdiagIndicesSM :: SpMatrix a -> [(IxRow, IxCol)]
- sparsifyIM2 :: IntMap (IntMap Double) -> IntMap (IntMap Double)
- sparsifySM :: SpMatrix Double -> SpMatrix Double
- roundZeroOneSM :: SpMatrix Double -> SpMatrix Double
- swapRows :: IxRow -> IxRow -> SpMatrix a -> SpMatrix a
- swapRowsSafe :: IxRow -> IxRow -> SpMatrix a -> SpMatrix a
- transposeSM :: SpMatrix a -> SpMatrix a
- (#^) :: SpMatrix a -> SpMatrix a
- matScale :: Num a => a -> SpMatrix a -> SpMatrix a
- normFrobenius :: SpMatrix Double -> Double
- matMat :: Num a => SpMatrix a -> SpMatrix a -> SpMatrix a
- (##) :: Num a => SpMatrix a -> SpMatrix a -> SpMatrix a
- matMatSparsified :: SpMatrix Double -> SpMatrix Double -> SpMatrix Double
- (#~#) :: SpMatrix Double -> SpMatrix Double -> SpMatrix Double
- (#^#) :: SpMatrix Double -> SpMatrix Double -> SpMatrix Double
- (##^) :: SpMatrix Double -> SpMatrix Double -> SpMatrix Double
- contractSub :: Num a => SpMatrix a -> SpMatrix a -> IxRow -> IxCol -> Int -> a
Sparse Matrix
Creation
Diagonal matrix
mkDiagonal :: Int -> [a] -> SpMatrix a Source #
Identity matrix
Permutation matrix
permutationSM :: Num a => Int -> [IxRow] -> SpMatrix a Source #
Permutation matrix from a (possibly incomplete) list of row swaps starting from row 0 e.g. `permutationSM 5 [1,3]` first swaps rows (0, 1) and then rows (1, 3) :
- 0,1,0,0,0
- 0,0,0,1,0
- 0,0,1,0,0
- 1,0,0,0,0
- 0,0,0,0,1
permutPairsSM :: Num a => Int -> [(IxRow, IxRow)] -> SpMatrix a Source #
Permutation matrix from a (possibly incomplete) list of row pair swaps e.g. `permutPairs 5 [(2,4)]` swaps rows (2, 4) :
- 1,0,0,0,0
- 0,1,0,0,0
- 0,0,0,0,1
- 0,0,0,1,0
- 0,0,1,0,0
Super- or sub- diagonal matrix
mkSubDiagonal :: Int -> Int -> [a] -> SpMatrix a Source #
`mkSubDiagonal n o xx` creates a square SpMatrix of size n
with xx
on the o
th subdiagonal
Element insertion
insertSpMatrix :: IxRow -> IxCol -> a -> SpMatrix a -> SpMatrix a Source #
Insert an element in a preexisting Spmatrix at the specified indices
fromList
fromListSM' :: Foldable t => t (IxRow, IxCol, a) -> SpMatrix a -> SpMatrix a Source #
Add to existing SpMatrix using data from list (row, col, value)
fromListSM :: Foldable t => (Int, Int) -> t (IxRow, IxCol, a) -> SpMatrix a Source #
Create new SpMatrix using data from list (row, col, value)
fromListDenseSM :: Int -> [a] -> SpMatrix a Source #
Create new SpMatrix assuming contiguous, 0-based indexing of elements
toList
toDenseListSM :: Num t => SpMatrix t -> [(IxRow, IxCol, t)] Source #
Populate list with SpMatrix contents and populate missing entries with 0
Lookup
lookupWD_SM :: Num a => SpMatrix a -> (IxRow, IxCol) -> a Source #
Looks up an element in the matrix with a default (if the element is not found, zero is returned)
(@@!) :: Num a => SpMatrix a -> (IxRow, IxCol) -> a Source #
Zero-default lookup, infix form (no bound checking)
Looks up an element in the matrix with a default (if the element is not found, zero is returned)
(@@) :: Num a => SpMatrix a -> (IxRow, IxCol) -> a Source #
Zero-default lookup, infix form ("safe" : throws exception if lookup is outside matrix bounds)
Looks up an element in the matrix with a default (if the element is not found, zero is returned)
Sub-matrices
filterSM :: (Key -> Key -> a -> Bool) -> SpMatrix a -> SpMatrix a Source #
Indexed filtering function
extractDiag :: SpMatrix a -> SpMatrix a Source #
Diagonal, subdiagonal, superdiagonal partitions of a SpMatrix (useful for writing preconditioners)
extractSuperDiag :: SpMatrix a -> SpMatrix a Source #
Diagonal, subdiagonal, superdiagonal partitions of a SpMatrix (useful for writing preconditioners)
extractSubDiag :: SpMatrix a -> SpMatrix a Source #
Diagonal, subdiagonal, superdiagonal partitions of a SpMatrix (useful for writing preconditioners)
extractSubmatrixSM :: (Key -> Key) -> (Key -> Key) -> SpMatrix a -> (IxRow, IxRow) -> (IxCol, IxCol) -> SpMatrix a Source #
Extract a submatrix given the specified index bounds, rebalancing keys with the two supplied functions
extractSubmatrixRebalanceKeys :: SpMatrix a -> (IxRow, IxRow) -> (IxCol, IxCol) -> SpMatrix a Source #
Extract a submatrix given the specified index bounds NB : subtracts (i1, j1) from the indices
extractSubmatrix :: SpMatrix a -> (IxRow, IxRow) -> (IxCol, IxCol) -> SpMatrix a Source #
Extract a submatrix given the specified index bounds NB : submatrix indices are _preserved_
Extract i'th row
extractSubRowSM :: SpMatrix a -> IxRow -> (IxCol, IxCol) -> SpMatrix a Source #
Extract column within a row range
extractSubRowSM_RK :: SpMatrix a -> IxRow -> (IxCol, IxCol) -> SpMatrix a Source #
Extract column within a row range, rebalance keys
Extract j'th column
extractSubColSM :: SpMatrix a -> IxCol -> (IxRow, IxRow) -> SpMatrix a Source #
Extract column within a row range
extractSubColSM_RK :: SpMatrix a -> IxCol -> (IxRow, IxRow) -> SpMatrix a Source #
Extract column within a row range, rebalance keys
Predicates
isValidIxSM :: SpMatrix a -> (Int, Int) -> Bool Source #
Are the supplied indices within matrix bounds?
isSquareSM :: SpMatrix a -> Bool Source #
Is the matrix square?
isDiagonalSM :: SpMatrix a -> Bool Source #
Is the matrix diagonal?
Matrix data and metadata
spySM :: Fractional b => SpMatrix a -> b Source #
Non-zero elements in a row
Bandwidth bounds (min, max)
Matrix stacking
Misc. SpMatrix operations
ifoldlSM :: (Key -> Key -> a -> b -> b) -> b -> SpMatrix a -> b Source #
Indexed left fold over SpMatrix
countSubdiagonalNZSM :: SpMatrix a -> Int Source #
Count sub-diagonal nonzeros
subdiagIndicesSM :: SpMatrix a -> [(IxRow, IxCol)] Source #
Filter the index subset that lies below the diagonal (used in the QR decomposition, for example)
Sparsify : remove almost-0 elements (|x| < eps)
Value rounding
roundZeroOneSM :: SpMatrix Double -> SpMatrix Double Source #
Round almost-0 and almost-1 to 0 and 1 respectively
Primitive algebra operations
Matrix row swap
swapRows :: IxRow -> IxRow -> SpMatrix a -> SpMatrix a Source #
swap two rows of a SpMatrix (bounds not checked)
swapRowsSafe :: IxRow -> IxRow -> SpMatrix a -> SpMatrix a Source #
swap two rows of a SpMatrix (bounds checked)
Matrix transpose
transposeSM :: SpMatrix a -> SpMatrix a Source #
transposeSM, (#^) : Matrix transpose
Multiply matrix by a scalar
Frobenius norm
Matrix-matrix product
Matrix-matrix product, sparsified
matMatSparsified :: SpMatrix Double -> SpMatrix Double -> SpMatrix Double Source #
Removes all elements x
for which `| x | <= eps`)
(#~#) :: SpMatrix Double -> SpMatrix Double -> SpMatrix Double Source #
Removes all elements x
for which `| x | <= eps`)