Matrix module: including creation, manipulation, and various vectorised mathematical operations.
About the comparison of two complex numbers x and y, Owl uses the
following conventions: 1) x and y are equal iff both real and imaginary
parts are equal; 2) x is less than y if the magnitude of x is less than
the magnitude of x; in case both x and y have the same magnitudes, x
is less than x if the phase of x is less than the phase of y; 3) less or
equal, greater, greater or equal relation can be further defined atop of the
aforementioned conventions.
val empty : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> ('a, 'b) tempty m n creates an m by n matrix without initialising the values of
elements in x.
val create : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> 'a ‑> ('a, 'b) tcreate m n a creates an m by n matrix and all the elements of x are
initialised with the value a.
val init : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> (int ‑> 'a) ‑> ('a, 'b) tinit m n f creates a matrix x of shape m x n, then using
f to initialise the elements in x. The input of f is 1-dimensional
index of the matrix. You need to explicitly convert it if you need 2D
index. The function Owl_utils._index_1d_nd can help you.
val init_nd : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> (int ‑> int ‑> 'a) ‑> ('a, 'b) tinit_nd m n f s almost the same as init but f receives 2D index
as input. It is more convenient since you don't have to convert the index by
yourself, but this also means init_nd is slower than init.
val zeros : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> ('a, 'b) tzeros m n creates an m by n matrix where all the elements are
initialised to zeros.
val ones : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> ('a, 'b) tones m n creates an m by n matrix where all the elements are ones.
val eye : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> ('a, 'b) teye m creates an m by m identity matrix.
val complex : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> ('c, 'd) Owl_dense_ndarray_generic.kind ‑> ('a, 'b) t ‑> ('a, 'b) t ‑> ('c, 'd) tcomplex re im constructs a complex ndarray/matrix from re and im.
re and im contain the real and imaginary part of x respectively.
Note that both re and im can be complex but must have same type. The real
part of re will be the real part of x and the imaginary part of im will
be the imaginary part of x.
val polar : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> ('c, 'd) Owl_dense_ndarray_generic.kind ‑> ('a, 'b) t ‑> ('a, 'b) t ‑> ('c, 'd) tcomplex rho theta constructs a complex ndarray/matrix from polar
coordinates rho and theta. rho contains the magnitudes and theta
contains phase angles. Note that the behaviour is undefined if rho has
negative elelments or theta has infinity elelments.
val sequential : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> ?a:'a ‑> ?step:'a ‑> int ‑> int ‑> ('a, 'b) tsequential ~a ~step m n creates an m by n matrix. The elements in x
are initialised sequentiallly from ~a and is increased by ~step.
The default value of ~a is zero whilst the default value of ~step is one.
val uniform : ?scale:float ‑> ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> ('a, 'b) tuniform m n creates an m by n matrix where all the elements
follow a uniform distribution in (0,1) interval. uniform ~scale:a m n
adjusts the interval to (0,a).
val gaussian : ?sigma:float ‑> ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> int ‑> ('a, 'b) tgaussian m n creates an m by n matrix where all the elements in x
follow a Gaussian distribution with specified sigma. By default sigma = 1.
val semidef : (float, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> (float, 'b) t semidef n returns an random n by n positive semi-definite matrix.
val linspace : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> 'a ‑> 'a ‑> int ‑> ('a, 'b) tlinspace a b n linearly divides the interval [a,b] into n pieces by
creating an m by 1 row vector. E.g., linspace 0. 5. 5 will create a
row vector [0;1;2;3;4;5].
val logspace : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> ?base:float ‑> 'a ‑> 'a ‑> int ‑> ('a, 'b) tlogspace base a b n ... the default value of base is e.
val meshgrid : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> 'a ‑> 'a ‑> 'a ‑> 'a ‑> int ‑> int ‑> ('a, 'b) t * ('a, 'b) tmeshgrid a1 b1 a2 b2 n1 n2 is similar to the meshgrid function in
Matlab. It returns two matrices x and y where the row vectors in x are
linearly spaced between [a1,b1] by n1 whilst the column vectors in y
are linearly spaced between (a2,b2) by n2.
val bernoulli : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> ?p:float ‑> ?seed:int ‑> int ‑> int ‑> ('a, 'b) tbernoulli k ~p:0.3 m n
diagm k v creates a diagonal matrix using the elements in v as
diagonal values. k specifies the main diagonal index. If k > 0 then it is
above the main diagonal, if k < 0 then it is below the main diagonal.
This function is the same as the diag function in Matlab.
triu k x returns the element on and above the kth diagonal of x.
k = 0 is the main diagonal, k > 0 is above the main diagonal, and
k < 0 is below the main diagonal.
tril k x returns the element on and below the kth diagonal of x.
k = 0 is the main diagonal, k > 0 is above the main diagonal, and
k < 0 is below the main diagonal.
symmetric ~upper x creates a symmetric matrix using either upper or lower
triangular part of x. If upper is true then it uses the upper part, if
upper is false, then symmetric uses the lower part. By default upper
is true.
hermitian ~upper x creates a hermitian matrix based on x. By default,
the upper triangular part is used for creating the hermitian matrix, but you
use the lower part by setting upper=false
bidiagonal upper dv ev creates a bidiagonal matrix using dv and ev.
Both dv and ev are row vectors. dv is the main diagonal. If upper is
true then ev is superdiagonal; if upper is false then ev is
subdiagonal. By default, upper is true.
NOTE: because the diagonal elements in a hermitian matrix must be real, the
function set the imaginary part of the diagonal elements to zero by default.
In other words, if the diagonal elements of x have non-zero imaginary parts,
the imaginary parts will be dropped without a warning.
toeplitz ~c r generates a toeplitz matrix using r and c. Both r and
c are row vectors of the same length. If the first elements of c is
different from that of r, r's first element will be used.
Note: 1) If c is not passed in, then c = r will be used. 2) If c is not
passed in and r is complex, the c = conj r will be used. 3) If r and c
have different length, then the result is a rectangular matrix.
hankel ~r c generates a hankel matrix using r and c. c will be the
first column and r will be the last row of the returned matrix.
Note: 1) If only c is passed in, the elelments below the anti-diagnoal are
zero. 2) If the last element of c is different from the first element of r
then the first element of c prevails. 3) c and r can have different
length, the return will be an rectangular matrix.
val hadamard : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> ('a, 'b) thadamard k n constructs a hadamard matrix of order n. For a hadamard H,
we have H'*H = n*I. Currrently, this function handles only the cases where
n, n/12, or n/20 is a power of 2.
val magic : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> int ‑> ('a, 'b) tmagic k n constructs a n x n magic square matrix x. The elements in
x are consecutive numbers increasing from 1 to n^2. n must n >= 3.
There are three different algorithms to deal with n is odd, singly even,
and doubly even respectively.
val shape : ('a, 'b) t ‑> int * intIf x is an m by n matrix, shape x returns (m,n), i.e., the size
of two dimensions of x.
val numel : ('a, 'b) t ‑> intnumel x returns the number of elements in matrix x. It is equivalent
to (row_num x) * (col_num x).
val kind : ('a, 'b) t ‑> ('a, 'b) Owl_dense_ndarray_generic.kindkind x returns the type of matrix x.
val get : ('a, 'b) t ‑> int ‑> int ‑> 'aget x i j returns the value of element (i,j) of x. The shorthand
for get x i j is x.{i,j}
val set : ('a, 'b) t ‑> int ‑> int ‑> 'a ‑> unitset x i j a sets the element (i,j) of x to value a. The shorthand
for set x i j a is x.{i,j} <- a
val get_index : ('a, 'b) t ‑> int array array ‑> 'a arrayget_index i x returns an array of element values specified by the indices
i. The length of array i equals the number of dimensions of x. The
arrays in i must have the same length, and each represents the indices in
that dimension.
E.g., [| [|1;2|]; [|3;4|] |] returns the value of elements at position
(1,3) and (2,4) respectively.
val set_index : ('a, 'b) t ‑> int array array ‑> 'a array ‑> unitset_index sets the value of elements in x according to the indices
specified by i. The length of array i equals the number of dimensions of
x. The arrays in i must have the same length, and each represents the
indices in that dimension.
val get_slice : Owl_types.index list ‑> ('a, 'b) t ‑> ('a, 'b) tslice s x returns a copy of the slice in x. The slice is defined by a
which is an int array. Please refer to the same function in the
Owl_dense_ndarray_generic documentation for more details.
val set_slice : Owl_types.index list ‑> ('a, 'b) t ‑> ('a, 'b) t ‑> unitset_slice axis x y set the slice defined by axis in x according to
the values in y. y must have the same shape as the one defined by axis.
About the slice definition of axis, please refer to slice function.
get_slice_simple axis x aims to provide a simpler version of get_slice.
This function assumes that every list element in the passed in in list list
represents a range, i.e., R constructor.
E.g., [[];[0;3];[0]] is equivalent to [R []; R [0;3]; R [0]] .
set_slice_simple axis x y aims to provide a simpler version of set_slice.
This function assumes that every list element in the passed in in list list
represents a range, i.e., R constructor.
E.g., [[];[0;3];[0]] is equivalent to [R []; R [0;3]; R [0]] .
rows x a returns the rows (defined in an int array a) of x. The
returned rows will be combined into a new dense matrix. The order of rows in
the new matrix is the same as that in the array a.
reshape x s returns a new m by n matrix from the m' by n'
matrix x. Note that (m * n) must be equal to (m' * n'), and the
returned matrix shares the same memory with the original x.
flatten x reshape x into a 1 by n row vector without making a copy.
Therefore the returned value shares the same memory space with original x.
reverse x reverse the order of all elements in the flattened x and
returns the results in a new matrix. The original x remains intact.
flip ~axis x flips a matrix/ndarray along axis. By default axis = 0.
The result is returned in a new matrix/ndarray, so the original x remains
intact.
rotate x d rotates x clockwise d degrees. d must be multiple times
of 90, otherwise the function will fail. If x is an n-dimensional array,
then the function rotates the plane formed by the first and second dimensions.
concat_vertical x y concats two matrices x and y vertically,
therefore their column numbers must be the same.
concat_horizontal x y concats two matrices x and y horizontally,
therefore their row numbers must be the same.
concatenate ~axis:1 x concatenates an array of matrices along the second
dimension. For the matrices in x, they must have the same shape except the
dimension specified by axis. The default value of axis is 0, i.e., the
lowest dimension on a marix, i.e., rows.
ctranspose x performs conjugate transpose of a complex matrix x. If x
is a real matrix, then ctranspose x is equivalent to transpose x.
diag k x returns the kth diagonal elements of x. k > 0 means above
the main diagonal and k < 0 means the below the main diagonal.
val swap_cols : ('a, 'b) t ‑> int ‑> int ‑> unitswap_cols x j j' swaps the column j with column j' of x.
dropout ~rate:0.3 x drops out 30% of the elements in x, in other words,
by setting their values to zeros.
val top : ('a, 'b) t ‑> int ‑> int array arraytop x n returns the indices of n greatest values of x. The indices are
arranged according to the corresponding elelment values, from the greatest one
to the smallest one.
val bottom : ('a, 'b) t ‑> int ‑> int array arraybottom x n returns the indices of n smallest values of x. The indices
are arranged according to the corresponding elelment values, from the smallest
one to the greatest one.
val iteri : (int ‑> int ‑> 'a ‑> unit) ‑> ('a, 'b) t ‑> unititeri f x iterates all the elements in x and applies the user defined
function f : int -> int -> float -> 'a. f i j v takes three parameters,
i and j are the coordinates of current element, and v is its value.
val iter : ('a ‑> unit) ‑> ('a, 'b) t ‑> unititer f x is the same as as iteri f x except the coordinates of the
current element is not passed to the function f : float -> 'a
mapi f x maps each element in x to a new value by applying
f : int -> int -> float -> float. The first two parameters are the
coordinates of the element, and the third parameter is the value.
map f x is similar to mapi f x except the coordinates of the
current element is not passed to the function f : float -> float
val foldi : (int ‑> int ‑> 'c ‑> 'a ‑> 'c) ‑> 'c ‑> ('a, 'b) t ‑> 'cval fold : ('c ‑> 'a ‑> 'c) ‑> 'c ‑> ('a, 'b) t ‑> 'cfold f a x folds all the elements in x with the function
f : 'a -> float -> 'a. For an m by n matrix x, the order of folding
is from (0,0) to (m-1,n-1), row by row.
val filteri : (int ‑> int ‑> 'a ‑> bool) ‑> ('a, 'b) t ‑> (int * int) arrayfilteri f x uses f : int -> int -> float -> bool to filter out certain
elements in x. An element will be included if f returns true. The
returned result is a list of coordinates of the selected elements.
val filter : ('a ‑> bool) ‑> ('a, 'b) t ‑> (int * int) arraySimilar to filteri, but the coordinates of the elements are not passed to
the function f : float -> bool.
iteri_cols f x iterates every column in x and applies function
f : int -> mat -> unit to each of them. Column number is passed to f as
the first parameter.
filteri_rows f x uses function f : int -> mat -> bool to check each
row in x, then returns an int array containing the indices of those rows
which satisfy the function f.
filteri_cols f x uses function f : int -> mat -> bool to check each
column in x, then returns an int array containing the indices of those
columns which satisfy the function f.
fold_rows f a x folds all the rows in x using function f. The order
of folding is from the first row to the last one.
fold_cols f a x folds all the columns in x using function f. The
order of folding is from the first column to the last one.
mapi_rows f x maps every row in x to a type 'a value by applying
function f : int -> mat -> 'a to each of them. The results is an array of
all the returned values.
mapi_by_row d f x applies f to each row of a m by n matrix x,
then uses the returned d dimensional row vectors to assemble a new
m by d matrix.
mapi_by_col d f x applies f to each column of a m by n matrix x,
then uses the returned d dimensional column vectors to assemble a new
d by n matrix.
map_at_row f x i is similar to mapi_at_row except that the coordinates
of an element is not passed to f.
map_at_col f x i is similar to mapi_at_col except that the coordinates
of an element is not passed to f.
val exists : ('a ‑> bool) ‑> ('a, 'b) t ‑> boolexists f x checks all the elements in x using f. If at least one
element satisfies f then the function returns true otherwise false.
val not_exists : ('a ‑> bool) ‑> ('a, 'b) t ‑> boolnot_exists f x checks all the elements in x, the function returns
true only if all the elements fail to satisfy f : float -> bool.
val for_all : ('a ‑> bool) ‑> ('a, 'b) t ‑> boolfor_all f x checks all the elements in x, the function returns true
if and only if all the elements pass the check of function f.
val is_positive : ('a, 'b) t ‑> boolis_positive x returns true if all the elements in x are positive.
val is_negative : ('a, 'b) t ‑> boolis_negative x returns true if all the elements in x are negative.
val is_nonpositive : ('a, 'b) t ‑> boolis_nonpositive returns true if all the elements in x are non-positive.
val is_nonnegative : ('a, 'b) t ‑> boolis_nonnegative returns true if all the elements in x are non-negative.
val is_normal : ('a, 'b) t ‑> boolis_normal x returns true if all the elelments in x are normal float
numbers, i.e., not NaN, not INF, not SUBNORMAL. Please refer to
https://www.gnu.org/software/libc/manual/html_node/Floating-Point-Classes.html https://www.gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html#Infinity-and-NaN
val not_nan : ('a, 'b) t ‑> boolnot_nan x returns false if there is any NaN element in x. Otherwise,
the function returns true indicating all the numbers in x are not NaN.
val not_inf : ('a, 'b) t ‑> boolnot_inf x returns false if there is any positive or negative INF
element in x. Otherwise, the function returns true.
greater_equal x y returns true if all the elements in x are not
smaller than the corresponding elements in y.
less_equal x y returns true if all the elements in x are not
greater than the corresponding elements in y.
elt_equal x y performs element-wise = comparison of x and y. Assume
that a is from x and b is the corresponding element of a from y of
the same position. The function returns another binary (0 and 1)
ndarray/matrix wherein 1 indicates a = b.
elt_not_equal x y performs element-wise != comparison of x and y.
Assume that a is from x and b is the corresponding element of a from
y of the same position. The function returns another binary (0 and 1)
ndarray/matrix wherein 1 indicates a <> b.
elt_less x y performs element-wise < comparison of x and y. Assume
that a is from x and b is the corresponding element of a from y of
the same position. The function returns another binary (0 and 1)
ndarray/matrix wherein 1 indicates a < b.
elt_greater x y performs element-wise > comparison of x and y.
Assume that a is from x and b is the corresponding element of a from
y of the same position. The function returns another binary (0 and 1)
ndarray/matrix wherein 1 indicates a > b.
elt_less_equal x y performs element-wise <= comparison of x and y.
Assume that a is from x and b is the corresponding element of a from
y of the same position. The function returns another binary (0 and 1)
ndarray/matrix wherein 1 indicates a <= b.
elt_greater_equal x y performs element-wise >= comparison of x and y.
Assume that a is from x and b is the corresponding element of a from
y of the same position. The function returns another binary (0 and 1)
ndarray/matrix wherein 1 indicates a >= b.
val equal_scalar : ('a, 'b) t ‑> 'a ‑> boolequal_scalar x a checks if all the elements in x are equal to a. The
function returns true iff for every element b in x, b = a.
val not_equal_scalar : ('a, 'b) t ‑> 'a ‑> boolnot_equal_scalar x a checks if all the elements in x are not equal to a.
The function returns true iff for every element b in x, b <> a.
val less_scalar : ('a, 'b) t ‑> 'a ‑> boolless_scalar x a checks if all the elements in x are less than a.
The function returns true iff for every element b in x, b < a.
val greater_scalar : ('a, 'b) t ‑> 'a ‑> boolgreater_scalar x a checks if all the elements in x are greater than a.
The function returns true iff for every element b in x, b > a.
val less_equal_scalar : ('a, 'b) t ‑> 'a ‑> boolless_equal_scalar x a checks if all the elements in x are less or equal
to a. The function returns true iff for every element b in x, b <= a.
val greater_equal_scalar : ('a, 'b) t ‑> 'a ‑> boolgreater_equal_scalar x a checks if all the elements in x are greater or
equal to a. The function returns true iff for every element b in x,
b >= a.
elt_equal_scalar x a performs element-wise = comparison of x and a.
Assume that b is one element from x The function returns another binary
(0 and 1) ndarray/matrix wherein 1 of the corresponding position
indicates a = b, otherwise 0.
elt_not_equal_scalar x a performs element-wise != comparison of x and
a. Assume that b is one element from x The function returns another
binary (0 and 1) ndarray/matrix wherein 1 of the corresponding position
indicates a <> b, otherwise 0.
elt_less_scalar x a performs element-wise < comparison of x and a.
Assume that b is one element from x The function returns another binary
(0 and 1) ndarray/matrix wherein 1 of the corresponding position
indicates a < b, otherwise 0.
elt_greater_scalar x a performs element-wise > comparison of x and a.
Assume that b is one element from x The function returns another binary
(0 and 1) ndarray/matrix wherein 1 of the corresponding position
indicates a > b, otherwise 0.
elt_less_equal_scalar x a performs element-wise <= comparison of x and
a. Assume that b is one element from x The function returns another
binary (0 and 1) ndarray/matrix wherein 1 of the corresponding position
indicates a <= b, otherwise 0.
elt_greater_equal_scalar x a performs element-wise >= comparison of x
and a. Assume that b is one element from x The function returns
another binary (0 and 1) ndarray/matrix wherein 1 of the corresponding
position indicates a >= b, otherwise 0.
approx_equal ~eps x y returns true if x and y are approximately
equal, i.e., for any two elements a from x and b from y, we have
abs (a - b) < eps.
Note: the threshold check is exclusive for passed in eps.
val approx_equal_scalar : ?eps:float ‑> ('a, 'b) t ‑> 'a ‑> boolapprox_equal_scalar ~eps x a returns true all the elements in x are
approximately equal to a, i.e., abs (x - a) < eps. For complex numbers,
the eps applies to both real and imaginary part.
Note: the threshold check is exclusive for the passed in eps.
approx_elt_equal ~eps x y compares the element-wise equality of x and
y, then returns another binary (i.e., 0 and 1) ndarray/matrix wherein
1 indicates that two corresponding elements a from x and b from y
are considered as approximately equal, namely abs (a - b) < eps.
approx_elt_equal_scalar ~eps x a compares all the elements of x to a
scalar value a, then returns another binary (i.e., 0 and 1)
ndarray/matrix wherein 1 indicates that the element b from x is
considered as approximately equal to a, namely abs (a - b) < eps.
draw_rows x m draws m rows randomly from x. The row indices are also
returned in an int array along with the selected rows. The parameter
replacement indicates whether the drawing is by replacement or not.
draw_cols x m draws m cols randomly from x. The column indices are
also returned in an int array along with the selected columns. The parameter
replacement indicates whether the drawing is by replacement or not.
val draw_rows2 : ?replacement:bool ‑> ('a, 'b) t ‑> ('a, 'b) t ‑> int ‑> ('a, 'b) t * ('a, 'b) t * int arraydraw_rows2 x y c is similar to draw_rows but applies to two matrices.
val draw_cols2 : ?replacement:bool ‑> ('a, 'b) t ‑> ('a, 'b) t ‑> int ‑> ('a, 'b) t * ('a, 'b) t * int arraydraw_col2 x y c is similar to draw_cols but applies to two matrices.
shuffle x shuffles all the elements in x by first shuffling along the
rows then shuffling along columns. It is equivalent to shuffle_cols (shuffle_rows x).
val to_array : ('a, 'b) t ‑> 'a arrayto_array x flattens an m by n matrix x then returns x as an
float array of length (numel x).
val of_array : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> 'a array ‑> int ‑> int ‑> ('a, 'b) tof_array x m n converts a float array x into an m by n matrix. Note the
length of x must be equal to (m * n).
val to_arrays : ('a, 'b) t ‑> 'a array arrayto arrays x returns an array of float arrays, wherein each row in x
becomes an array in the result.
val of_arrays : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> 'a array array ‑> ('a, 'b) tof_arrays x converts an array of m float arrays (of length n) in to
an m by n matrix.
val print : ?max_row:int ‑> ?max_col:int ‑> ?header:bool ‑> ?fmt:('a ‑> string) ‑> ('a, 'b) t ‑> unitprint x pretty prints matrix x without headings.
val save : ('a, 'b) t ‑> string ‑> unitsave x f saves the matrix x to a file with the name f. The format
is binary by using Marshal module to serialise the matrix.
val load : ('a, 'b) Owl_dense_ndarray_generic.kind ‑> string ‑> ('a, 'b) tload f loads a sparse matrix from file f. The file must be previously
saved by using save function.
val save_txt : ('a, 'b) t ‑> string ‑> unitsave_txt x f save the matrix x into a text file f. The operation can
be very time consuming.
val load_txt : (float, 'a) Owl_dense_ndarray_generic.kind ‑> string ‑> (float, 'a) tload_txt f load a text file f into a matrix.
val re_c2s : (Complex.t, Bigarray.complex32_elt) t ‑> (float, Bigarray.float32_elt) tre_c2s x returns all the real components of x in a new ndarray of same shape.
val re_z2d : (Complex.t, Bigarray.complex64_elt) t ‑> (float, Bigarray.float64_elt) tre_d2z x returns all the real components of x in a new ndarray of same shape.
val im_c2s : (Complex.t, Bigarray.complex32_elt) t ‑> (float, Bigarray.float32_elt) tim_c2s x returns all the imaginary components of x in a new ndarray of same shape.
val im_z2d : (Complex.t, Bigarray.complex64_elt) t ‑> (float, Bigarray.float64_elt) tim_d2z x returns all the imaginary components of x in a new ndarray of same shape.
val min : ('a, 'b) t ‑> 'amin x returns the minimum of all elements in x. For two complex numbers,
the one with the smaller magnitude will be selected. If two magnitudes are
the same, the one with the smaller phase will be selected.
val max : ('a, 'b) t ‑> 'amax x returns the maximum of all elements in x. For two complex numbers,
the one with the greater magnitude will be selected. If two magnitudes are
the same, the one with the greater phase will be selected.
val min_i : ('a, 'b) t ‑> 'a * int arraymin_i x returns the minimum of all elements in x as well as its index.
val max_i : ('a, 'b) t ‑> 'a * int arraymax_i x returns the maximum of all elements in x as well as its index.
val minmax_i : ('a, 'b) t ‑> ('a * int array) * ('a * int array)minmax_i x returns ((min_v,min_i), (max_v,max_i)) where (min_v,min_i)
is the minimum value in x along with its index while (max_v,max_i) is the
maximum value along its index.
val prod : ?axis:int option array ‑> ('a, 'b) t ‑> 'aprod x returns the product of all the elements in x.
val average : ('a, 'b) t ‑> 'aaverage x returns the average value of all the elements in x. It is
equivalent to calculate sum x divided by numel x
average_rows x returns the average value of all row vectors in x. It is
equivalent to div_scalar (sum_rows x) (float_of_int (row_num x)).
average_cols x returns the average value of all column vectors in x.
It is equivalent to div_scalar (sum_cols x) (float_of_int (col_num x)).
val min_rows : (float, 'b) t ‑> (float * int * int) arraymin_rows x returns the minimum value in each row along with their coordinates.
val min_cols : (float, 'b) t ‑> (float * int * int) arraymin_cols x returns the minimum value in each column along with their coordinates.
val max_rows : (float, 'b) t ‑> (float * int * int) arraymax_rows x returns the maximum value in each row along with their coordinates.
val max_cols : (float, 'b) t ‑> (float * int * int) arraymax_cols x returns the maximum value in each column along with their coordinates.
val abs_c2s : (Complex.t, Bigarray.complex32_elt) t ‑> (float, Bigarray.float32_elt) tabs_c2s x is similar to abs but takes complex32 as input.
val abs_z2d : (Complex.t, Bigarray.complex64_elt) t ‑> (float, Bigarray.float64_elt) tabs_z2d x is similar to abs but takes complex64 as input.
val abs2_c2s : (Complex.t, Bigarray.complex32_elt) t ‑> (float, Bigarray.float32_elt) tabs2_c2s x is similar to abs2 but takes complex32 as input.
val abs2_z2d : (Complex.t, Bigarray.complex64_elt) t ‑> (float, Bigarray.float64_elt) tabs2_z2d x is similar to abs2 but takes complex64 as input.
conj x computes the conjugate of the elements in x and returns the
result in a new matrix. If the passed in x is a real matrix, the function
simply returns a copy of the original x.
reci_tol ~tol x computes the reciprocal of every element in x. Different
from reci, reci_tol sets the elements whose abs value smaller than tol
to zeros. If tol is not specified, the defautl Owl_utils.eps Float32 will
be used. For complex numbers, refer to Owl's doc to see how to compare.
signum computes the sign value (-1 for negative numbers, 0 (or -0)
for zero, 1 for positive numbers, nan for nan).
exp2 x computes the base-10 exponential of the elements in x and returns
the result in a new matrix.
asinh x computes the hyperbolic arc sine of the elements in x and
returns the result in a new matrix.
acosh x computes the hyperbolic arc cosine of the elements in x and
returns the result in a new matrix.
atanh x computes the hyperbolic arc tangent of the elements in x and
returns the result in a new matrix.
fix x rounds each element of x to the nearest integer toward zero.
For positive elements, the behavior is the same as floor. For negative ones,
the behavior is the same as ceil.
modf x performs modf over all the elements in x, the fractal part is
saved in the first element of the returned tuple whereas the integer part is
saved in the second element.
erfc x computes the complementary error function of the elements in x
and returns the result in a new matrix.
logistic x computes the logistic function 1/(1 + exp(-a) of the elements
in x and returns the result in a new matrix.
relu x computes the rectified linear unit function max(x, 0) of the
elements in x and returns the result in a new matrix.
softplus x computes the softplus function log(1 + exp(x) of the elements
in x and returns the result in a new matrix.
softsign x computes the softsign function x / (1 + abs(x)) of the
elements in x and returns the result in a new matrix.
softmax x computes the softmax functions (exp x) / (sum (exp x)) of
all the elements in x and returns the result in a new array.
val log_sum_exp : (float, 'a) t ‑> floatlog_sum_exp x computes the logarithm of the sum of exponentials of all
the elements in x.
val l2norm_sqr : ('a, 'b) t ‑> floatl2norm_sqr x calculates the square of l2-norm (or l2norm, Euclidean norm)
of all elements in x. The function uses conjugate transpose in the product,
hence it always returns a float number.
val max_pool : ?padding:Owl_types.padding ‑> (float, 'a) t ‑> int array ‑> int array ‑> (float, 'a) tval avg_pool : ?padding:Owl_types.padding ‑> (float, 'a) t ‑> int array ‑> int array ‑> (float, 'a) tvar x computes the variance of x along the axis dimension. By default,
axis is set to the lowest dimension.
std x computes the standard deviation of x along the axis dimension.
By default, axis is set to the lowest dimension.
mat2gray ~amin ~amax x converts the matrix x to the intensity image.
The elements in x are clipped by amin and amax, and they will be between
0. and 1. after conversion to represents the intensity.
sub_scalar x a subtracts a scalar value a from each element in x,
and returns the result in a new matrix.
mul_scalar x a multiplies each element in x by a scalar value a,
and returns the result in a new matrix.
div_scalar x a divides each element in x by a scalar value a, and
returns the result in a new matrix.
scalar_sub a x subtracts each element in x from a scalar value a,
and returns the result in a new matrix.
scalar_mul a x multiplies each element in x by a scalar value a,
and returns the result in a new matrix.
scalar_div a x divides a scalar value a by each element in x,
and returns the result in a new matrix.
pow x y computes pow(a, b) of all the elements in x and y
elementwise, and returns the result in a new matrix.
atan2 x y computes atan2(a, b) of all the elements in x and y
elementwise, and returns the result in a new matrix.
hypot x y computes sqrt(x*x + y*y) of all the elements in x and y
elementwise, and returns the result in a new matrix.
min2 x y computes the minimum of all the elements in x and y
elementwise, and returns the result in a new matrix.
max2 x y computes the maximum of all the elements in x and y
elementwise, and returns the result in a new matrix.
val ssqr : ('a, 'b) t ‑> 'a ‑> 'assqr x a computes the sum of squared differences of all the elements in
x from constant a. This function only computes the square of each element
rather than the conjugate transpose as sqr_nrm2 does.
ssqr_diff x y computes the sum of squared differences of every elements in
x and its corresponding element in y.
clip_by_value ~amin ~amax x clips the elements in x based on amin and
amax. The elements smaller than amin will be set to amin, and the
elements greater than amax will be set to amax.
cov ~a calculates the covariance matrix of a wherein each row represents
one observation and each column represents one random variable. a is
normalised by the number of observations-1. If there is only one observation,
it is normalised by 1.
cov ~a ~b takes two matrices as inputs. The functions flatten a and b
first then returns a 2 x 2 matrix, so two must have the same number of
elements.
kron a b calculates the Kronecker product between the matrices a
and b. If a is an m x n matrix and b is a p x q matrix, then
kron(a,b) is an m*p x n*q matrix formed by taking all possible products
between the elements of a and the matrix b.
val cast_s2d : (float, Bigarray.float32_elt) t ‑> (float, Bigarray.float64_elt) tcast_s2d x casts x from float32 to float64.
val cast_d2s : (float, Bigarray.float64_elt) t ‑> (float, Bigarray.float32_elt) tcast_d2s x casts x from float64 to float32.
val cast_c2z : (Complex.t, Bigarray.complex32_elt) t ‑> (Complex.t, Bigarray.complex64_elt) tcast_c2z x casts x from complex32 to complex64.
val cast_z2c : (Complex.t, Bigarray.complex64_elt) t ‑> (Complex.t, Bigarray.complex32_elt) tcast_z2c x casts x from complex64 to complex32.
val cast_s2c : (float, Bigarray.float32_elt) t ‑> (Complex.t, Bigarray.complex32_elt) tcast_s2c x casts x from float32 to complex32.
val cast_d2z : (float, Bigarray.float64_elt) t ‑> (Complex.t, Bigarray.complex64_elt) tcast_d2z x casts x from float64 to complex64.
val cast_s2z : (float, Bigarray.float32_elt) t ‑> (Complex.t, Bigarray.complex64_elt) tcast_s2z x casts x from float32 to complex64.
val cast_d2c : (float, Bigarray.float64_elt) t ‑> (Complex.t, Bigarray.complex32_elt) tcast_d2c x casts x from float64 to complex32.