QCaml/Utils/Matrix.mli

102 lines
2.7 KiB
OCaml

(* Sparse or dense matrices *)
open Lacaml.D
type t
(** {1 Accessors} *)
val is_sparse : t -> bool
(** True is the matrix is sparse. *)
val is_dense : t -> bool
(** True is the matrix is dense. *)
val dim1 : t -> int
(** First dimension of the matrix *)
val dim2 : t -> int
(** Secons dimension of the matrix *)
val get : t -> int -> int -> float
(** [get m i j] returns {% $\mathbf{m}_{ij}$ %}. *)
(** {1 Converters } *)
val to_mat : t -> Mat.t
(** Convert into a Lacaml Mat. *)
val to_vector_array : ?threshold:float -> t -> Vector.t array
(** Convert the matrix into an array of column vectors. *)
val of_fun : int -> int -> (int -> int -> float) -> t
(** [of_fun m n f] creates a computed matrix of dimension m times n, where the function
[f i j] is called to evaluate element [i j] *)
val sparse_of_dense : ?threshold:float -> t -> t
(** Creates a sparse matrix from a dense matrix. Default threshold is {!Constants.epsilon}. *)
val sparse_of_computed : ?threshold:float -> t -> t
(** Creates a sparse matrix from a computed matrix. *)
val dense_of_computed : t -> t
(** Creates a dense matrix from a computed matrix. *)
val dense_of_sparse : t -> t
(** Creates a dense matrix from a sparse matrix. *)
val dense_of_mat : Mat.t -> t
(** Create a dense matrix from a Lacaml Mat *)
val sparse_of_mat : ?threshold:float -> Lacaml.D.Mat.t -> t
(** Create a sparse matrix from a Lacaml Mat. Default threshold is {!Constants.epsilon}. *)
val sparse_of_vector_array : Vector.t array -> t
(** Create a sparse matrix from an array of column vectors. *)
val transpose : t -> t
(** Returns the transposed matrix. *)
val split_cols : int -> t -> t list
(** [split_cols n m_M] Split the matrix [m_M] by packs of [n] columns *)
val join_cols : t list -> t
(** [join_cols l] Joins the list of matrices into a single matrix (along columns). *)
(** {1 Operations} *)
val outer_product : ?threshold:float -> Vector.t -> Vector.t -> t
(** Creates the matrix formed by the outer product of two vectors. *)
val mm : ?transa:trans3 -> ?transb:trans3 -> ?threshold:float -> t -> t -> t
(** Matrix multiplication *)
val mv : ?sparse:bool -> ?trans:trans3 -> ?threshold:float -> t -> Vector.t -> Vector.t
(** Matrix Vector product *)
val ax_eq_b : ?trans:trans3 -> t -> t -> t
(** Solves A.X = B or A'.X = B *)
val add : t -> t -> t
(** Add two matrices *)
val sub : t -> t -> t
(** Subtract two matrices *)
(** {1 Parallel routines } *)
val parallel_mm : ?transa:trans3 -> ?transb:trans3 -> ?threshold:float -> t -> t -> t
(** Matrix multiplication, parallelized by splitting b along the columns. *)
(** {1 Printers } *)
val pp : Format.formatter -> t -> unit
(** {1 Unit testing} *)
val test_case : unit -> (string * [> `Quick ] * (unit -> unit)) list