QCaml/Utils/Vector.mli

79 lines
1.8 KiB
OCaml

(* Sparse or dense vectors *)
open Lacaml.D
type t
(** {1 Accessors} *)
val is_sparse : t -> bool
(** True is the vector is sparse. *)
val is_dense : t -> bool
(** True is the vector is dense. *)
val get : t -> int -> float
(** [get v i] returns the i-th element of [v]. *)
val dim : t -> int
(** Dimension of the vector *)
(** {1 Converters } *)
val to_vec : t -> Vec.t
(** Convert into a Lacaml Vec. *)
val to_assoc_list : ?threshold:float -> t -> (int * float) list
(** Convert into an association list. *)
val sparse_of_dense : ?threshold:float -> t -> t
(** Creates a sparse vector from a dense vector. Default threshold is {!Constants.epsilon}. *)
val dense_of_sparse : t -> t
(** Creates a dense vector from a sparse vector. *)
val dense_of_vec : Vec.t -> t
(** Create a dense vector from a Lacaml Vec *)
val sparse_of_vec : ?threshold:float -> Vec.t -> t
(** Create a sparse vector from a Lacaml Vec. Default threshold is {!Constants.epsilon}. *)
val sparse_of_assoc_list : int -> (int * float) list -> t
(** Create a sparse vector from an association list [(index,value)]. The first integer is
the size of the vector. *)
(** {1 Operations} *)
val neg : t -> t
(** Returns the negative of the vector. *)
val scale : ?threshold:float -> float -> t -> t
(** Scale a vector by a constant *)
val add : ?threshold:float -> t -> t -> t
(** Add two vectors *)
val sub : ?threshold:float -> t -> t -> t
(** Subtract two vectors *)
val axpy : ?threshold:float -> ?alpha:float -> t -> t -> t
(** {% $a \mathbf{x} + \mathbf{y}$ %} *)
val dot : t -> t -> float
(** Dot product. *)
val norm : t -> float
(** l2-norm of the vector : {% $\sqrt{\sum_i x_i^2}$ %} *)
(** {1 Printers } *)
val pp : Format.formatter -> t -> unit
(** {1 Unit testing} *)
val test_case : unit -> (string * [> `Quick ] * (unit -> unit)) list