Module Mat.Float

Float allows to manipulate float-valued matrices

type 'a k = 'a
type 'a m = 'a
type base_index = Linalg.Tensor.Int.pos
type 'a shape = 'a Linalg.Tensor.Int.t
type index := base_index * base_index
include Linalg.Intf.Vec with type 'a k := 'a k and type 'a m := 'a m and type 'a shape := 'a shape
type 'a k

Ambient monad.

type 'a m

Representation.

type 'a shape

Type of shapes.

type ('a, 'b) morphism

Type of shape morphisms.

type elt

Type of elements.

type 'i t = ('i shape'i melt m) Linalg.Intf.vec
type 'i out = ('i shape'i melt munit m) Linalg.Intf.ovec
val idim : 'i t -> 'i shape

Dimensions of an input vector.

val odim : 'i out -> 'i shape

Dimensions of an output vector.

val make : 'i shape -> ('i m -> elt m) -> 'i t

Creates an input vector from a dimension and a function.

val pullback : ('j'i) morphism -> 'i t -> 'j t k

Pullback a vector along a shape morphism.

val get : 'i t -> 'i m -> elt m k

Get an elemement of an input vector.

raises Out_of_bounds

if given index is not in the domain of the vector.

val unsafe_get : 'i t -> 'i m -> elt m

Get an elemement of an input vector. Does not perform bound checking.

val set : 'i out -> 'i m -> elt m -> unit m k

Set an elemement in an output vector.

raises Out_of_bounds

if given index is not in the domain of the vector.

val map : ('a m -> 'b m) -> ('i shape'i m'a m) Linalg.Intf.vec -> ('i shape'i m'b m) Linalg.Intf.vec
val mapi : ('i m -> 'a m -> 'b m) -> ('i shape'i m'a m) Linalg.Intf.vec -> ('i shape'i m'b m) Linalg.Intf.vec
val map2 : ('a m -> 'b m -> 'c m) -> ('i shape'i m'a m) Linalg.Intf.vec -> ('i shape'i m'b m) Linalg.Intf.vec -> ('i shape'i m'c m) Linalg.Intf.vec k
val map2i : ('i m -> 'a m -> 'b m -> 'c m) -> ('i shape'i m'a m) Linalg.Intf.vec -> ('i shape'i m'b m) Linalg.Intf.vec -> ('i shape'i m'c m) Linalg.Intf.vec k
val assign : ('i shape'i m'a munit m) Linalg.Intf.ovec -> ('i shape'i m'a m) Linalg.Intf.vec -> ('i shape'i munit m) Linalg.Intf.vec k
val zero : 'i shape -> 'i t

Everywhere zero vector.

val one : 'i shape -> 'i t

Everywhere one vector.

val const : 'i shape -> elt m -> 'i t

Constant vector.

val basis : 'i shape -> 'i m -> elt m -> 'i t k

basis s i r is the vector of shape s everywhere equal to R.zero except at index i where it is equal to r. Raises Out_of_bounds if i does not belong to s.

val add : 'i t -> 'i t -> 'i t k

Pointwise addition. Raises Dimensions_mismatch if the shape of operands are not equal.

val sub : 'i t -> 'i t -> 'i t k

Pointwise subtraction. Raises Dimensions_mismatch if the shape of operands are not equal.

val mul : 'i t -> 'i t -> 'i t k

Pointwise multiplication. Raises Dimensions_mismatch if the shape of operands are not equal.

val neg : 'i t -> 'i t

Pointwise negation.

val smul : elt m -> 'i t -> 'i t

Multiplication by a scalar.

val swap : 'i m -> 'i m -> 'i t -> 'i t k

Swapping of indices. Raises Out_of_bounds if given indices are invalid.

val iter : ('i shape'i munit m) Linalg.Intf.vec -> unit m

iter v iterates the effectful computation at each index

val reduce : (elt m -> elt m -> elt m) -> elt m -> ('i shape'i melt m) Linalg.Intf.vec -> elt m

reduce op zero v folds the binary, associative operator op over the elements of v with initial value zero. Fold ordering is implementation-dependent: consider using commutative operators.

val (:=) : ('i shape'i m'a munit m) Linalg.Intf.ovec -> ('i shape'i m'a m) Linalg.Intf.vec -> unit m k

Vector assignement.

raises Dimensions_mismatch

if the size of operands are not equal.

val add_ : 'i out -> 'i t -> 'i t -> unit m k

Pointwise addition, stores result in first operand.

raises Dimensions_mismatch

if the size of operands are not equal.

val sub_ : 'i out -> 'i t -> 'i t -> unit m k

Pointwise subtraction, stores result in first operand.

raises Dimensions_mismatch

if the size of operands are not equal.

val mul_ : 'i out -> 'i t -> 'i t -> unit m k

Pointwise multiplication, stores result in first operand.

raises Dimensions_mismatch

if the size of operands are not equal.

val dot : 'i t -> 'i t -> elt m k

Dot product.

raises Dimensions_mismatch

if the size of operands are not equal.

module Infix : sig ... end
val index : c:base_index m -> r:base_index m -> index m

Indexing

val cols : index t -> base_index shape

cols m returns the shape of the columns of m.

val rows : index t -> base_index shape

rows m returns the shape of the rows of m

val identity : base_index shape -> index t

Identity matrix

val diagonal : (base_index shapebase_index melt m) Linalg.Intf.vec -> index t

Square matrix with given vector on diagonal

val col : index t -> base_index m -> (base_index shapebase_index melt m) Linalg.Intf.vec k

Get a column.

raises Out_of_bounds

if given indices are invalid.

val of_col : (base_index shapebase_index melt m) Linalg.Intf.vec -> index t

Convert a vector into a matrix with this vector as single column.

val row : index t -> base_index m -> (base_index shapebase_index melt m) Linalg.Intf.vec k

Get a row.

raises Out_of_bounds

if given indices are invalid.

val of_row : (base_index shapebase_index melt m) Linalg.Intf.vec -> index t

Convert a vector into a matrix with this vector as single row.

val swap_rows : index t -> base_index m -> base_index m -> index t k

Swap two rows.

raises Out_of_bounds

if given indices are invalid.

val swap_cols : index t -> base_index m -> base_index m -> index t k

Swap two columns.

raises Out_of_bounds

if given indices are invalid.

val concat_horiz : index t -> index t -> index t k

Concatenate two matrices horizontally, provided they have the same number of rows.

raises Dimensions_mismatch

if this condition is not verified.

val concat_vert : index t -> index t -> index t k

Concatenate two matrices vertically, provided they have the same number of columns.

raises Dimensions_mismatch

if this condition is not verified.

val mm : index t -> index t -> index t k

Matrix multiplication.

raises Dimensions_mismatch

if the nummber of columns of the left-hand side is not equal to the number of rows of the right-hand side.