blas-0.7.1: Bindings to the BLAS library

Stabilityexperimental
MaintainerPatrick Perry <patperry@stanford.edu>

Data.Matrix.Banded.Class

Contents

Description

An overloaded interface to mutable banded matrices. For matrix types than can be used with this interface, see Data.Matrix.Banded.IO and Data.Matrix.Banded.ST. Many of these functions can also be used with the immutable type defined in Data.Matrix.Banded.

Synopsis

Banded matrix type classes

class (MatrixShaped a, HasVectorView a, HasMatrixStorage a, Elem e, BaseVector (VectorView a) e, BaseMatrix (MatrixStorage a) e) => BaseBanded a e whereSource

Common functionality for all banded matrix types.

Methods

numLower :: a (n, p) e -> IntSource

Get the number of lower diagonals in the banded matrix.

numUpper :: a (n, p) e -> IntSource

Get the number of upper diagonals in the banded matrix

bandwidths :: a (n, p) e -> (Int, Int)Source

Get the range of valid diagonals in the banded matrix. bandwidthds a is equal to (numLower a, numUpper a).

ldaBanded :: a (n, p) e -> IntSource

Get the leading dimension of the underlying storage of the banded matrix.

isHermBanded :: a (n, p) e -> BoolSource

Indicate whether or not the banded matrix is transposed and conjugated.

coerceBanded :: a np e -> a np' eSource

Cast the shape type of the banded matrix.

maybeMatrixStorageFromBanded :: a (n, p) e -> Maybe (MatrixStorage a (k, p) e)Source

Get a matrix with the underlying storage of the banded matrix. This will fail if the banded matrix is hermed.

maybeBandedFromMatrixStorage :: (Int, Int) -> (Int, Int) -> MatrixStorage a (k, p) e -> Maybe (a (n, p) e)Source

Given a shape and bandwidths, possibly view the elements stored in a dense matrix as a banded matrix. This will if the matrix storage is hermed. An error will be called if the number of rows in the matrix does not equal the desired number of diagonals or if the number of columns in the matrix does not equal the desired number of columns.

viewVectorAsBanded :: (Int, Int) -> VectorView a k e -> a (n, p) eSource

View a vector as a banded matrix of the given shape. The vector must have length equal to one of the specified dimensions.

viewVectorAsDiagBanded :: VectorView a n e -> a (n, n) eSource

View a vector as a diagonal banded matrix.

maybeViewBandedAsVector :: a (n, p) e -> Maybe (VectorView a k e)Source

If the banded matrix has only a single diagonal, return a view into that diagonal. Otherwise, return Nothing.

unsafeBandedToIOBanded :: a (n, p) e -> IOBanded (n, p) eSource

Unsafe cast from a matrix to an IOBanded.

Instances

class (BaseBanded a e, BLAS2 e, ReadTensor a (Int, Int) e m, MMatrix a e m, MMatrix (Herm a) e m, MMatrix (Tri a) e m, MSolve (Tri a) e m, ReadVector (VectorView a) e m, ReadMatrix (MatrixStorage a) e m) => ReadBanded a e m whereSource

Banded matrices that can be read in a monad.

Methods

unsafePerformIOWithBanded :: a (n, p) e -> (IOBanded (n, p) e -> IO r) -> m rSource

Cast the banded matrix to an IOBanded, perform an IO action, and convert the IO action to an action in the monad m. This operation is very unsafe.

freezeBanded :: a (n, p) e -> m (Banded (n, p) e)Source

Convert a mutable banded matrix to an immutable one by taking a complete copy of it.

unsafeFreezeBanded :: a (n, p) e -> m (Banded (n, p) e)Source

Instances

class (ReadBanded a e m, WriteTensor a (Int, Int) e m, WriteVector (VectorView a) e m, WriteMatrix (MatrixStorage a) e m) => WriteBanded a e m whereSource

Banded matrices that can be created or modified in a monad.

Methods

newBanded_ :: (Int, Int) -> (Int, Int) -> m (a (n, p) e)Source

Creates a new banded matrix of the given shape and bandwidths. The elements will be uninitialized.

unsafeConvertIOBanded :: IO (IOBanded (n, p) e) -> m (a (n, p) e)Source

Unsafely convert an IO action that creates an IOBanded into an action in m that creates a matrix.

thawBanded :: Banded (n, p) e -> m (a (n, p) e)Source

Convert an immutable banded matrix to a mutable one by taking a complete copy of it.

unsafeThawBanded :: Banded (n, p) e -> m (a (n, p) e)Source

Instances

Overloaded interface for matrices

Creating banded matrices

newBanded :: WriteBanded a e m => (Int, Int) -> (Int, Int) -> [((Int, Int), e)] -> m (a (n, p) e)Source

Create a banded matrix with the given shape, bandwidths, and associations. The indices in the associations list must all fall in the bandwidth of the matrix. Unspecified elements will be set to zero.

newListsBanded :: WriteBanded a e m => (Int, Int) -> (Int, Int) -> [[e]] -> m (a (n, p) e)Source

Create a banded matrix of the given shape and bandwidths by specifying its diagonal elements. The lists must all have the same length, equal to the number of elements in the main diagonal of the matrix. The sub-diagonals are specified first, then the super-diagonals. In subdiagonal i, the first i elements of the list are ignored.

Special banded matrices

newZeroBanded :: WriteBanded a e m => (Int, Int) -> (Int, Int) -> m (a (n, p) e)Source

Create a zero banded matrix with the specified shape and bandwidths.

setZeroBanded :: WriteBanded a e m => a (n, p) e -> m ()Source

Set every element of a banded matrix to zero.

newConstantBanded :: WriteBanded a e m => (Int, Int) -> (Int, Int) -> e -> m (a (n, p) e)Source

Create a constant banded matrix of the specified shape and bandwidths.

setConstantBanded :: WriteBanded a e m => e -> a (n, p) e -> m ()Source

Set every element of a banded matrix to a constant.

Copying banded matrices

newCopyBanded :: (ReadBanded a e m, WriteBanded b e m) => a (n, p) e -> m (b (n, p) e)Source

Create a new banded matrix by taking a copy of another one.

copyBanded :: (WriteBanded b e m, ReadBanded a e m) => b (n, p) e -> a (n, p) e -> m ()Source

Copy the elements of one banded matrix into another. The two matrices must have the same shape and badwidths.

Conversions between banded matrices and vectors

Row and column views

rowViewBanded :: BaseBanded a e => a (n, p) e -> Int -> (Int, VectorView a k e, Int)Source

Get a view into the partial row of the banded matrix, along with the number of zeros to pad before and after the view.

colViewBanded :: BaseBanded a e => a (n, p) e -> Int -> (Int, VectorView a k e, Int)Source

Get a view into the partial column of the banded matrix, along with the number of zeros to pad before and after the view.

diagViewBanded :: BaseBanded a e => a (n, p) e -> Int -> VectorView a k eSource

Get a view of a diagonal of the banded matrix. This will fail if the index is outside of the bandwidth.

Getting diagonals

getDiagBanded :: (ReadBanded a e m, WriteVector y e m) => a (n, p) e -> Int -> m (y k e)Source

Get a copy of the given diagonal of a banded matrix.

Overloaded interface for reading and writing banded matrix elements

Conversions between mutable and immutable banded matrices

Conversions from IOBandeds