Owl_utils_array
min_i x
returns the index of minimum value in array x
. If cmp
is not passed in then Stdlib.compare
is used as default value.
max_i x
returns the index of minimum value in array x
. If cmp
is not passed in then Stdlib.compare
is used as default value.
argsort cmp x
sorts x
according to the compare function cmp
and returns the corresponding indices.
sort_fill ~min ~max ~fill x
first sorts x
, then expands it to an array of length max - min + 1
, and fills the holes with fill
. E.g., sort_fill ~min:1 ~max:5 ~fill:0 [|4;2|] x
returns a new array as follows: [|1; 0; 2; 0; 4; 5|]
.
get_slice slice x
returns a copy of slice of x
defined by slice
. The slice
definition must have [|start;stop;step|]
format. The value of start, stop, and step can be negative, and the boundary is inclusive.
set_slice slice x y
sets the elements in x
to the corresponding value of the elements in y
based on the slice definition slice
. Please refer to get_slice
function for the information on the format of slice definition.
set_n arr indices v
sets the elements at the positions specified by indices
in the array arr
to the value v
.
range start stop
generates an array of integers from start
to stop
inclusive.
count arr x
counts the number of occurrences of the value x
in the array arr
.
insert arr1 arr2 pos
inserts the elements of arr2
into arr1
at the specified position pos
.
remove arr pos
removes the element at position pos
from the array arr
.
replace pos len arr1 arr2
replaces the subarray of length len
starting at pos
in arr1
with the elements from arr2
.
mapi f arr
applies the function f
to each element of the array arr
, passing the index of the element as the first argument to f
, and returns a new array of the results.
map f arr
applies the function f
to each element of the array arr
and returns a new array of the results.
iter2i f arr1 arr2
applies the function f
to each pair of corresponding elements from arr1
and arr2
, passing the index as the first argument to f
.
iter2 f arr1 arr2
applies the function f
to each pair of corresponding elements from arr1
and arr2
.
iter3i f arr1 arr2 arr3
applies the function f
to each triplet of corresponding elements from arr1
, arr2
, and arr3
, passing the index as the first argument to f
.
iter3 f arr1 arr2 arr3
applies the function f
to each triplet of corresponding elements from arr1
, arr2
, and arr3
.
val iter4i :
(int -> 'a -> 'b -> 'c -> 'd -> unit) ->
'a array ->
'b array ->
'c array ->
'd array ->
unit
iter4i f arr1 arr2 arr3 arr4
applies the function f
to each group of corresponding elements from arr1
, arr2
, arr3
, and arr4
, passing the index of the elements as the first argument to f
.
iter4 f arr1 arr2 arr3 arr4
applies the function f
to each group of corresponding elements from arr1
, arr2
, arr3
, and arr4
.
map2i f arr1 arr2
applies the function f
to each pair of corresponding elements from arr1
and arr2
, passing the index of the elements as the first argument to f
, and returns an array of the results.
map2i_split2 f arr1 arr2
applies the function f
to each pair of corresponding elements from arr1
and arr2
, passing the index of the elements as the first argument to f
, and returns a tuple of two arrays containing the first and second elements of the results of f
.
map3i f arr1 arr2 arr3
applies the function f
to each triplet of corresponding elements from arr1
, arr2
, and arr3
, passing the index of the elements as the first argument to f
, and returns an array of the results.
map3 f arr1 arr2 arr3
applies the function f
to each triplet of corresponding elements from arr1
, arr2
, and arr3
, and returns an array of the results.
val map4i :
(int -> 'a -> 'b -> 'c -> 'd -> 'e) ->
'a array ->
'b array ->
'c array ->
'd array ->
'e array
map4i f arr1 arr2 arr3 arr4
applies the function f
to each group of corresponding elements from arr1
, arr2
, arr3
, and arr4
, passing the index of the elements as the first argument to f
, and returns an array of the results.
map4 f arr1 arr2 arr3 arr4
applies the function f
to each group of corresponding elements from arr1
, arr2
, arr3
, and arr4
, and returns an array of the results.
filteri_v f arr
applies the function f
to each element of arr
, passing the index of the element as the first argument to f
. The function f
returns a pair of a boolean and a value. If the boolean is true
, the value is included in the result array.
filter_v f arr
applies the function f
to each element of arr
. The function f
returns a pair of a boolean and a value. If the boolean is true
, the value is included in the result array.
filteri f x
filters out the elements in x
according to predicate f
.
filter f x
filters out the elements in x
according to predicate f
.
filter2i f x y
filters the elements in x
and y
using passed in function f
. Both arrays must have same length.
filter2 f x y
is similar to filter2i
but without passing index of the elements to function f
.
filter2i_i f x y
filters the elements in x
and y
using passed in function f
. Both arrays must have same length. Note that the indices of those satisfying the predicate f
are returned in an array.
filter2_i f x y
is similar to filter2i_i
but without passing index of the elements to function f
.
filter2_split f x y
is similar to filter2 f x y
, but the returned results are two separated arrays rather than merging into one tuple array.
resize ~head v n x
resizes x
of length m
to length n
. If m <= n
, a copy of x
subarray is returned. If m > n
, then x
is extended, the extra space is filled with value v
.
fold2 a x y
folds both x
and y
from left with starting value a
.
pad side v len arr
pads the array arr
with the value v
on the specified side (`Left` or `Right`) until the array reaches the desired length len
.
If len
is less than or equal to the length of arr
, the original array is returned.
align side v x y
aligns two arrays x
and y
along the specified side with value v
. The copies of two arrays are returned.
val align3 :
[ `Left | `Right ] ->
'a ->
'a array ->
'a array ->
'a array ->
'a array * 'a array * 'a array
align3 side v x y z
aligns three arrays x
, y
, and z
.
greater_equal arr1 arr2
returns true
if all elements in arr1
are greater than or equal to the corresponding elements in arr2
, and false
otherwise.
swap arr i j
swaps the elements at indices i
and j
in the array arr
.
permute indices arr
rearranges the elements of arr
according to the order specified by indices
, returning a new array with the permuted elements.
of_tuples arr
converts an array of pairs into an array containing all the first elements followed by all the second elements of the pairs in arr
.
balance_last mass x
performs the following function. Let l
be the length of x
, if i < l - 1
, then x.(i) = x.(i)
, otherwise x.(l - 1) = mass - \sum_{i < l - 1} x.(i)
.
Binary search. bsearch cmp x a
returns the index of the largest value in the sorted array a
less than or equal to x
, according to the comparison function cmp
. If x
is smaller than all elements, returns -1. The function raises an exception if a
is empty.
val to_string :
?prefix:string ->
?suffix:string ->
?sep:string ->
('a -> string) ->
'a array ->
string
to_string ?prefix ?suffix ?sep f arr
converts the array arr
to a string representation, applying the function f
to each element to produce a string. The elements are separated by sep
(default is ", "), and the entire output is optionally wrapped with prefix
and suffix
.