1
(* ocamlgsl - OCaml interface to GSL *)
2
(* Copyright (�) 2002 - Olivier Andrieu *)
3
(* distributed under the terms of the GPL version 2 *)
7
type complex_double_vector_bigarr =
8
(Complex.t, complex64_elt, c_layout) Bigarray.Array1.t
10
type vector = complex_double_vector_bigarr
12
let create ?init len =
13
let barr = Array1.create complex64 c_layout len in
16
| Some x -> Array1.fill barr x
20
let length = Array1.dim
23
Array1.of_array complex64 c_layout arr
26
Array.init (Array1.dim v) (Array1.get v)
28
let of_complex_array arr =
29
let n = (Array.length arr) / 2 in
30
let barr = create n in
32
barr.{i} <- Gsl_complex.get arr i
36
let to_complex_array barr =
37
let n = Array1.dim barr in
38
let arr = Array.create (2*n) 0. in
40
Gsl_complex.set arr i barr.{i}
44
let get (v : vector) i = Array1.get v i
46
let set (v : vector) i x = Array1.set v i x
48
let set_all = Array1.fill
51
set_all v Complex.zero
57
let subvector v ~off ~len =
60
let memcpy ~src:v ~dst:w =
61
if length v <> length w
62
then invalid_arg "Gsl_vector.memcpy" ;
66
let w = create (length v) in
70
let swap_element v i j =
78
for i=0 to pred (len/2) do
79
swap_element v i (pred len - i)
88
type complex_float_vector_bigarr =
89
(Complex.t, complex32_elt, c_layout) Bigarray.Array1.t
91
type vector = complex_float_vector_bigarr
93
let create ?init len =
94
let barr = Array1.create complex32 c_layout len in
97
| Some x -> Array1.fill barr x
104
Array1.of_array complex32 c_layout arr
106
let to_array = to_array
108
let of_complex_array arr =
109
let n = (Array.length arr) / 2 in
110
let barr = create n in
112
barr.{i} <- Gsl_complex.get arr i
116
let to_complex_array barr =
117
let n = Array1.dim barr in
118
let arr = Array.create (2*n) 0. in
120
Gsl_complex.set arr i barr.{i}
124
let get (v : vector) i = Array1.get v i
126
let set (v : vector) i x = Array1.set v i x
128
let set_all = set_all
130
let set_zero = set_zero
136
let subvector = subvector
141
let w = create (length v) in
145
let swap_element v i j =
152
let len = length v in
153
for i=0 to pred (len/2) do
154
swap_element v i (pred len - i)