package prbnmcn-linalg

  1. Overview
  2. Docs

Make_native specializes Make to native execution.

Parameters

module R : Basic_structures.Basic_intf.Lang.Ring with type 'a m = 'a
module R_storage : Basic_structures.Basic_intf.Lang.Storage with type 'a m = 'a and type elt = R.t

Signature

type 'a k = 'a
type 'a m = 'a
type base_index = Tensor.Int.pos
type 'a shape = 'a Tensor.Int.t
type index := base_index * base_index
include Intf.Vec with type 'a k := 'a k and type 'a m := 'a m and type 'a shape := 'a shape with type ('a, 'b) morphism = ('a, 'b) Tensor.Int.Morphism.t with type elt = R.t
type ('a, 'b) morphism = ('a, 'b) Tensor.Int.Morphism.t

Type of shape morphisms.

type elt = R.t

Type of elements.

type 'i t = ('i shape, 'i m, elt m) Intf.vec
type 'i out = ('i shape, 'i m, elt m, unit m) 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) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec
val mapi : ('i m -> 'a m -> 'b m) -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec
val map2 : ('a m -> 'b m -> 'c m) -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec -> ('i shape, 'i m, 'c m) Intf.vec k
val map2i : ('i m -> 'a m -> 'b m -> 'c m) -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, 'b m) Intf.vec -> ('i shape, 'i m, 'c m) Intf.vec k
val assign : ('i shape, 'i m, 'a m, unit m) Intf.ovec -> ('i shape, 'i m, 'a m) Intf.vec -> ('i shape, 'i m, unit m) 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 m, unit m) 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 m, elt m) 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 m, unit m) Intf.ovec -> ('i shape, 'i m, 'a m) 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 shape, base_index m, elt m) Intf.vec -> index t

Square matrix with given vector on diagonal

Get a column.

  • raises Out_of_bounds

    if given indices are invalid.

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

Get a row.

  • raises Out_of_bounds

    if given indices are invalid.

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.

OCaml

Innovation. Community. Security.