val length : t -> int
Return the length (number of elements) of the given floatarray.
val get : t -> int -> float
get a n
returns the element numbern
of floatarraya
.Raise
Invalid_argument
ifn
is outside the range 0 to(length a - 1)
.
val set : t -> int -> float -> unit
set a n x
modifies floatarraya
in place, replacing element numbern
withx
.Raise
Invalid_argument
ifn
is outside the range 0 to(length a - 1)
.
val make : int -> float -> t
make n x
returns a fresh floatarray of lengthn
, initialized withx
.Raise
Invalid_argument
ifn < 0
orn > Sys.max_floatarray_length
.
val create : int -> t
create n
returns a fresh floatarray of lengthn
, with uninitialized data.Raise
Invalid_argument
ifn < 0
orn > Sys.max_floatarray_length
.
val init : int -> (int -> float) -> t
init n f
returns a fresh floatarray of lengthn
, with element numberi
initialized to the result off i
. In other terms,init n f
tabulates the results off
applied to the integers0
ton-1
.Raise
Invalid_argument
ifn < 0
orn > Sys.max_floatarray_length
.
val append : t -> t -> t
append v1 v2
returns a fresh floatarray containing the concatenation of the floatarraysv1
andv2
.Raise
Invalid_argument
iflength v1 + length v2 > Sys.max_floatarray_length
.
val sub : t -> int -> int -> t
sub a start len
returns a fresh floatarray of lengthlen
, containing the elements numberstart
tostart + len - 1
of floatarraya
.Raise
Invalid_argument
ifstart
andlen
do not designate a valid subarray ofa
; that is, ifstart < 0
, orlen < 0
, orstart + len > length a
.
val copy : t -> t
copy a
returns a copy ofa
, that is, a fresh floatarray containing the same elements asa
.
val fill : t -> int -> int -> float -> unit
fill a ofs len x
modifies the floatarraya
in place, storingx
in elements numberofs
toofs + len - 1
.Raise
Invalid_argument
ifofs
andlen
do not designate a valid subarray ofa
.
val blit : t -> int -> t -> int -> int -> unit
blit v1 o1 v2 o2 len
copieslen
elements from floatarrayv1
, starting at element numbero1
, to floatarrayv2
, starting at element numbero2
. It works correctly even ifv1
andv2
are the same floatarray, and the source and destination chunks overlap.Raise
Invalid_argument
ifo1
andlen
do not designate a valid subarray ofv1
, or ifo2
andlen
do not designate a valid subarray ofv2
.
val to_list : t -> float list
to_list a
returns the list of all the elements ofa
.
val of_list : float list -> t
of_list l
returns a fresh floatarray containing the elements ofl
.Raise
Invalid_argument
if the length ofl
is greater thanSys.max_floatarray_length
.
Iterators
val iter : (float -> unit) -> t -> unit
iter f a
applies functionf
in turn to all the elements ofa
. It is equivalent tof a.(0); f a.(1); ...; f a.(length a - 1); ()
.
val iteri : (int -> float -> unit) -> t -> unit
Same as
iter
, but the function is applied with the index of the element as first argument, and the element itself as second argument.
val map : (float -> float) -> t -> t
map f a
applies functionf
to all the elements ofa
, and builds a floatarray with the results returned byf
.
val mapi : (int -> float -> float) -> t -> t
Same as
map
, but the function is applied to the index of the element as first argument, and the element itself as second argument.
val fold_left : ('a -> float -> 'a) -> 'a -> t -> 'a
fold_left f x a
computesf (... (f (f x a.(0)) a.(1)) ...) a.(n-1)
, wheren
is the length of the floatarraya
.
val fold_right : (float -> 'a -> 'a) -> t -> 'a -> 'a
fold_right f a x
computesf a.(0) (f a.(1) ( ... (f a.(n-1) x) ...))
, wheren
is the length of the floatarraya
.
Iterators on two arrays
val iter2 : (float -> float -> unit) -> t -> t -> unit
Array.iter2 f a b
applies functionf
to all the elements ofa
andb
. RaiseInvalid_argument
if the floatarrays are not the same size.
val map2 : (float -> float -> float) -> t -> t -> t
map2 f a b
applies functionf
to all the elements ofa
andb
, and builds a floatarray with the results returned byf
:[| f a.(0) b.(0); ...; f a.(length a - 1) b.(length b - 1)|]
. RaiseInvalid_argument
if the floatarrays are not the same size.
Array scanning
val for_all : (float -> bool) -> t -> bool
for_all p [|a1; ...; an|]
checks if all elements of the floatarray satisfy the predicatep
. That is, it returns(p a1) && (p a2) && ... && (p an)
.
val exists : (float -> bool) -> t -> bool
exists p [|a1; ...; an|]
checks if at least one element of the floatarray satisfies the predicatep
. That is, it returns(p a1) || (p a2) || ... || (p an)
.
val mem : float -> t -> bool
mem a l
is true if and only if there is an element ofl
that is structurally equal toa
, i.e. there is anx
inl
such thatcompare a x = 0
.
val mem_ieee : float -> t -> bool
Same as
mem
, but uses IEEE equality instead of structural equality.
Sorting
val sort : (float -> float -> int) -> t -> unit
Sort a floatarray in increasing order according to a comparison function. The comparison function must return 0 if its arguments compare as equal, a positive integer if the first is greater, and a negative integer if the first is smaller (see below for a complete specification). For example,
Stdlib.compare
is a suitable comparison function. After callingsort
, the array is sorted in place in increasing order.sort
is guaranteed to run in constant heap space and (at most) logarithmic stack space.The current implementation uses Heap Sort. It runs in constant stack space.
Specification of the comparison function: Let
a
be the floatarray andcmp
the comparison function. The following must be true for allx
,y
,z
ina
:cmp x y
> 0 if and only ifcmp y x
< 0- if
cmp x y
>= 0 andcmp y z
>= 0 thencmp x z
>= 0
When
sort
returns,a
contains the same elements as before, reordered in such a way that for all i and j valid indices ofa
:cmp a.(i) a.(j)
>= 0 if and only if i >= j
val stable_sort : (float -> float -> int) -> t -> unit
Same as
sort
, but the sorting algorithm is stable (i.e. elements that compare equal are kept in their original order) and not guaranteed to run in constant heap space.The current implementation uses Merge Sort. It uses a temporary floatarray of length
n/2
, wheren
is the length of the floatarray. It is usually faster than the current implementation ofsort
.
val fast_sort : (float -> float -> int) -> t -> unit
Same as
sort
orstable_sort
, whichever is faster on typical input.
Iterators
val to_seq : t -> float Stdlib.Seq.t
Iterate on the floatarray, in increasing order. Modifications of the floatarray during iteration will be reflected in the iterator.
val to_seqi : t -> (int * float) Stdlib.Seq.t
Iterate on the floatarray, in increasing order, yielding indices along elements. Modifications of the floatarray during iteration will be reflected in the iterator.
val of_seq : float Stdlib.Seq.t -> t
Create an array from the generator.
val map_to_array : (float -> 'a) -> t -> 'a array
map_to_array f a
applies functionf
to all the elements ofa
, and builds an array with the results returned byf
:[| f a.(0); f a.(1); ...; f a.(length a - 1) |]
.
val map_from_array : ('a -> float) -> 'a array -> t
map_from_array f a
applies functionf
to all the elements ofa
, and builds a floatarray with the results returned byf
.