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) t
empty 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) t
create 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) t
init 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) t
init_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) t
zeros 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) t
ones 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) t
eye 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) t
complex 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) t
complex 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) t
sequential ~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) t
uniform 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) t
gaussian 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) t
linspace 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) t
logspace 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) t
meshgrid 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) t
bernoulli 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 k
th 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 k
th 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) t
hadamard 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) t
magic 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 * int
If 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 ‑> int
numel 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.kind
kind x
returns the type of matrix x
.
val get : ('a, 'b) t ‑> int ‑> int ‑> 'a
get 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 ‑> unit
set 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 array
get_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 ‑> unit
set_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) t
slice 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 ‑> unit
set_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 k
th 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 ‑> unit
swap_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 array
top 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 array
bottom 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 ‑> unit
iteri 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 ‑> unit
iter 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 ‑> 'c
val fold : ('c ‑> 'a ‑> 'c) ‑> 'c ‑> ('a, 'b) t ‑> 'c
fold 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) array
filteri 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) array
Similar 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 ‑> bool
exists 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 ‑> bool
not_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 ‑> bool
for_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 ‑> bool
is_positive x
returns true
if all the elements in x
are positive.
val is_negative : ('a, 'b) t ‑> bool
is_negative x
returns true
if all the elements in x
are negative.
val is_nonpositive : ('a, 'b) t ‑> bool
is_nonpositive
returns true
if all the elements in x
are non-positive.
val is_nonnegative : ('a, 'b) t ‑> bool
is_nonnegative
returns true
if all the elements in x
are non-negative.
val is_normal : ('a, 'b) t ‑> bool
is_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 ‑> bool
not_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 ‑> bool
not_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 ‑> bool
equal_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 ‑> bool
not_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 ‑> bool
less_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 ‑> bool
greater_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 ‑> bool
less_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 ‑> bool
greater_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 ‑> bool
approx_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 array
draw_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 array
draw_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 array
to_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) t
of_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 array
to 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) t
of_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 ‑> unit
print x
pretty prints matrix x
without headings.
val save : ('a, 'b) t ‑> string ‑> unit
save 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) t
load 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 ‑> unit
save_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) t
load_txt f
load a text file f
into a matrix.
val re_c2s : (Complex.t, Bigarray.complex32_elt) t ‑> (float, Bigarray.float32_elt) t
re_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) t
re_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) t
im_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) t
im_d2z x
returns all the imaginary components of x
in a new ndarray of same shape.
val min : ('a, 'b) t ‑> 'a
min 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 ‑> 'a
max 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 array
min_i x
returns the minimum of all elements in x
as well as its index.
val max_i : ('a, 'b) t ‑> 'a * int array
max_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 ‑> 'a
prod x
returns the product of all the elements in x
.
val average : ('a, 'b) t ‑> 'a
average 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) array
min_rows x
returns the minimum value in each row along with their coordinates.
val min_cols : (float, 'b) t ‑> (float * int * int) array
min_cols x
returns the minimum value in each column along with their coordinates.
val max_rows : (float, 'b) t ‑> (float * int * int) array
max_rows x
returns the maximum value in each row along with their coordinates.
val max_cols : (float, 'b) t ‑> (float * int * int) array
max_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) t
abs_c2s x
is similar to abs
but takes complex32
as input.
val abs_z2d : (Complex.t, Bigarray.complex64_elt) t ‑> (float, Bigarray.float64_elt) t
abs_z2d x
is similar to abs
but takes complex64
as input.
val abs2_c2s : (Complex.t, Bigarray.complex32_elt) t ‑> (float, Bigarray.float32_elt) t
abs2_c2s x
is similar to abs2
but takes complex32
as input.
val abs2_z2d : (Complex.t, Bigarray.complex64_elt) t ‑> (float, Bigarray.float64_elt) t
abs2_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 ‑> float
log_sum_exp x
computes the logarithm of the sum of exponentials of all
the elements in x
.
val l2norm_sqr : ('a, 'b) t ‑> float
l2norm_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) t
val avg_pool : ?padding:Owl_types.padding ‑> (float, 'a) t ‑> int array ‑> int array ‑> (float, 'a) t
var 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 ‑> 'a
ssqr 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) t
cast_s2d x
casts x
from float32
to float64
.
val cast_d2s : (float, Bigarray.float64_elt) t ‑> (float, Bigarray.float32_elt) t
cast_d2s x
casts x
from float64
to float32
.
val cast_c2z : (Complex.t, Bigarray.complex32_elt) t ‑> (Complex.t, Bigarray.complex64_elt) t
cast_c2z x
casts x
from complex32
to complex64
.
val cast_z2c : (Complex.t, Bigarray.complex64_elt) t ‑> (Complex.t, Bigarray.complex32_elt) t
cast_z2c x
casts x
from complex64
to complex32
.
val cast_s2c : (float, Bigarray.float32_elt) t ‑> (Complex.t, Bigarray.complex32_elt) t
cast_s2c x
casts x
from float32
to complex32
.
val cast_d2z : (float, Bigarray.float64_elt) t ‑> (Complex.t, Bigarray.complex64_elt) t
cast_d2z x
casts x
from float64
to complex64
.
val cast_s2z : (float, Bigarray.float32_elt) t ‑> (Complex.t, Bigarray.complex64_elt) t
cast_s2z x
casts x
from float32
to complex64
.
val cast_d2c : (float, Bigarray.float64_elt) t ‑> (Complex.t, Bigarray.complex32_elt) t
cast_d2c x
casts x
from float64
to complex32
.