feldspar-language-0.7: A functional embedded language for DSP and parallelism

Feldspar.Matrix

Description

Operations on matrices (doubly-nested parallel vectors). All operations in this module assume rectangular matrices.

Synopsis

# Documentation

type Matrix a = Vector2 a Source

tMat :: Patch a a -> Patch (Matrix a) (Matrix a) Source

freezeMatrix :: Type a => Matrix a -> Data [[a]] Source

Converts a matrix to a core array.

thawMatrix :: Type a => Data [[a]] -> Matrix a Source

Converts a core array to a matrix.

thawMatrix' :: Type a => Length -> Length -> Data [[a]] -> Matrix a Source

Converts a core array to a matrix. The first length argument is the number of rows (outer vector), and the second argument is the number of columns (inner vector).

matrix :: Type a => [[a]] -> Matrix a Source

Constructs a matrix. The elements are stored in a core array.

indexedMat :: Data Length -> Data Length -> (Data Index -> Data Index -> a) -> Vector (Vector a) Source

Constructing a matrix from an index function.

`indexedMat m n ixf`:

• `m` is the number of rows.
• `n` is the number of columns.
• `ifx` is a function mapping indexes to elements (first argument is row index; second argument is column index).

transpose :: Syntax a => Vector (Vector a) -> Vector (Vector a) Source

Transpose of a matrix. Assumes that the number of rows is > 0.

flatten :: Type a => Matrix a -> Vector (Data a) Source

Concatenates the rows of a matrix.

diagonal :: Type a => Matrix a -> Vector (Data a) Source

The diagonal vector of a square matrix. It happens to work if the number of rows is less than the number of columns, but not the other way around (this would require some overhead).

distributeL :: (a -> b -> c) -> a -> Vector b -> Vector c Source

distributeR :: (a -> b -> c) -> Vector a -> b -> Vector c Source

class Mul a b where Source

Associated Types

type Prod a b Source

Methods

(***) :: a -> b -> Prod a b Source

General multiplication operator

Instances

 Numeric a => Mul (Data a) (Matrix a) Numeric a => Mul (Data a) (Vector1 a) Numeric a => Mul (Data a) (Data a) Numeric a => Mul (Vector1 a) (Matrix a) Numeric a => Mul (Vector1 a) (Vector1 a) Numeric a => Mul (Vector1 a) (Data a) Numeric a => Mul (Matrix a) (Matrix a) Numeric a => Mul (Matrix a) (Vector1 a) Numeric a => Mul (Matrix a) (Data a)

mulMat :: Numeric a => Matrix a -> Matrix a -> Matrix a Source

Matrix multiplication

class Syntax a => ElemWise a where Source

Associated Types

type Scalar a Source

Methods

elemWise :: (Scalar a -> Scalar a -> Scalar a) -> a -> a -> a Source

Operator for general element-wise multiplication

Instances

 Type a => ElemWise (Data a) (ElemWise a, Syntax (Vector a)) => ElemWise (Vector a)

(.+) :: (ElemWise a, Num (Scalar a)) => a -> a -> a Source

(.-) :: (ElemWise a, Num (Scalar a)) => a -> a -> a Source

(.*) :: (ElemWise a, Num (Scalar a)) => a -> a -> a Source