Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
squareMatrix.ml1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73module type Ops = sig (** Matrix Arithmetic *) type t val mul : t -> t -> t val add : t -> t -> t val sub : t -> t -> t val transpose : t -> t val map : (float -> float) -> t -> t val mul_scalar : t -> float -> t val div_scalar : t -> float -> t val add_scalar : t -> float -> t val sub_scalar : t -> float -> t end module type Config = sig val size : int end module type S = Ops with type t = float array array module Make (C : Config) : S = struct include C type t = float array array let mul a b = let m = Array.make_matrix C.size C.size 0. in for i = 0 to C.size - 1 do for j = 0 to C.size - 1 do for k = 0 to C.size - 1 do m.(i).(j) <- m.(i).(j) +. (a.(i).(k) *. b.(k).(j)) done done done; m let element_wise op a b = let m = Array.make_matrix C.size C.size 0. in for i = 0 to C.size - 1 do for j = 0 to C.size - 1 do m.(i).(j) <- op a.(i).(j) b.(i).(j) done done; m let add = element_wise ( +. ) let sub = element_wise ( -. ) let transpose t = let m = Array.make_matrix C.size C.size 0. in for i = 0 to C.size - 1 do for j = 0 to C.size - 1 do m.(i).(j) <- t.(j).(i) done done; m let map f t = let m = Array.make_matrix C.size C.size 0. in for i = 0 to C.size - 1 do for j = 0 to C.size - 1 do m.(i).(j) <- f t.(i).(j) done done; m let mul_scalar t s = map (( *. ) s) t let div_scalar t s = map (( *. ) (1. /. s)) t let add_scalar t s = map (( +. ) s) t let sub_scalar t s = map (( +. ) (-1. *. s)) t end