1
(* ocamlgsl - OCaml interface to GSL *)
2
(* Copyright (�) 2002 - Olivier Andrieu *)
3
(* distributed under the terms of the GPL version 2 *)
7
type double_vector_bigarr =
8
(float, float64_elt, c_layout) Bigarray.Array1.t
10
type vector = double_vector_bigarr
12
let create ?init len =
13
let barr = Array1.create float64 c_layout len in
16
| Some x -> Array1.fill barr x
20
let length = Array1.dim
23
Array1.of_array float64 c_layout arr
26
Array.init (Array1.dim v) (Array1.get v)
28
let get (v : vector) i = Array1.get v i
30
let set (v : vector) i x = Array1.set v i x
42
let subvector v ~off ~len =
45
let memcpy ~src:v ~dst:w =
46
if length v <> length w
47
then invalid_arg "Gsl_vector.memcpy" ;
51
let w = create (length v) in
55
let swap_element v i j =
63
for i=0 to pred (len/2) do
64
swap_element v i (pred len - i)
67
external add : vector -> vector -> unit
69
external sub : vector -> vector -> unit
71
external mul : vector -> vector -> unit
73
external div : vector -> vector -> unit
75
external scale : vector -> float -> unit
76
= "ml_gsl_vector_scale"
77
external add_constant : vector -> float -> unit
78
= "ml_gsl_vector_add_constant"
79
external is_null : vector -> bool
80
= "ml_gsl_vector_isnull"
82
external max : vector -> float
84
external min : vector -> float
86
external minmax : vector -> float * float
87
= "ml_gsl_vector_minmax"
88
external max_index : vector -> int
89
= "ml_gsl_vector_maxindex"
90
external min_index : vector -> int
91
= "ml_gsl_vector_minindex"
92
external minmax_index : vector -> int * int
93
= "ml_gsl_vector_minmaxindex"
100
type float_vector_bigarr =
101
(float, float32_elt, c_layout) Bigarray.Array1.t
103
type vector = float_vector_bigarr
105
let create ?init len =
106
let barr = Array1.create float32 c_layout len in
107
begin match init with
109
| Some x -> Array1.fill barr x
116
Array1.of_array float32 c_layout arr
118
let to_array = to_array
120
let get (v : vector) i = Array1.get v i
122
let set (v : vector) i x = Array1.set v i x
124
let set_all = set_all
126
let set_zero = set_zero
132
let subvector = subvector
137
let w = create (length v) in
141
let swap_element v i j =
148
let len = length v in
149
for i=0 to pred (len/2) do
150
swap_element v i (pred len - i)
153
external add : vector -> vector -> unit
154
= "ml_gsl_vector_float_add"
155
external sub : vector -> vector -> unit
156
= "ml_gsl_vector_float_sub"
157
external mul : vector -> vector -> unit
158
= "ml_gsl_vector_float_mul"
159
external div : vector -> vector -> unit
160
= "ml_gsl_vector_float_div"
161
external scale : vector -> float -> unit
162
= "ml_gsl_vector_float_scale"
163
external add_constant : vector -> float -> unit
164
= "ml_gsl_vector_float_add_constant"
165
external is_null : vector -> bool
166
= "ml_gsl_vector_float_isnull"
168
external max : vector -> float
169
= "ml_gsl_vector_float_max"
170
external min : vector -> float
171
= "ml_gsl_vector_float_min"
172
external minmax : vector -> float * float
173
= "ml_gsl_vector_float_minmax"
174
external max_index : vector -> int
175
= "ml_gsl_vector_float_maxindex"
176
external min_index : vector -> int
177
= "ml_gsl_vector_float_minindex"
178
external minmax_index : vector -> int * int
179
= "ml_gsl_vector_float_minmaxindex"