2020-02-25 06:16:14 +00:00
|
|
|
exception RangeWrong(string);
|
|
|
|
|
2020-02-21 13:54:39 +00:00
|
|
|
let interpolate =
|
|
|
|
(xMin: float, xMax: float, yMin: float, yMax: float, xIntended: float)
|
|
|
|
: float => {
|
|
|
|
let minProportion = (xMax -. xIntended) /. (xMax -. xMin);
|
|
|
|
let maxProportion = (xIntended -. xMin) /. (xMax -. xMin);
|
|
|
|
yMin *. minProportion +. yMax *. maxProportion;
|
|
|
|
};
|
2020-02-21 14:05:42 +00:00
|
|
|
|
|
|
|
let sum = Belt.Array.reduce(_, 0., (i, j) => i +. j);
|
|
|
|
let mean = a => sum(a) /. (Array.length(a) |> float_of_int);
|
2020-02-25 07:10:21 +00:00
|
|
|
let min = a => Belt.Array.reduce(a, a[0], (i, j) => i < j ? i : j);
|
2020-02-25 07:38:08 +00:00
|
|
|
let max = a => Belt.Array.reduce(a, a[0], (i, j) => i > j ? i : j);
|
2020-02-25 09:45:41 +00:00
|
|
|
let up = (a, b) =>
|
|
|
|
Array.make(b - a + 1, a)
|
|
|
|
|> Array.mapi((i, c) => c + i)
|
|
|
|
|> Belt.Array.map(_, float_of_int);
|
2020-02-25 07:59:01 +00:00
|
|
|
let down = (a, b) =>
|
2020-02-25 09:45:41 +00:00
|
|
|
Array.make(a - b + 1, a)
|
|
|
|
|> Array.mapi((i, c) => c - i)
|
|
|
|
|> Belt.Array.map(_, float_of_int);
|
2020-02-25 06:16:14 +00:00
|
|
|
let range = (min: float, max: float, n: int): array(float) => {
|
|
|
|
switch (n) {
|
|
|
|
| 0 => [||]
|
|
|
|
| 1 => [|min|]
|
|
|
|
| 2 => [|min, max|]
|
|
|
|
| _ when min == max => Belt.Array.make(n, min)
|
|
|
|
| _ when n < 0 => raise(RangeWrong("n is less then zero"))
|
|
|
|
| _ when min > max => raise(RangeWrong("Min values is less then max"))
|
|
|
|
| _ =>
|
2020-02-25 07:01:40 +00:00
|
|
|
let diff = (max -. min) /. Belt.Float.fromInt(n - 1);
|
|
|
|
Belt.Array.makeBy(n, i => {min +. Belt.Float.fromInt(i) *. diff});
|
2020-02-25 06:16:14 +00:00
|
|
|
};
|
|
|
|
};
|
2020-02-25 07:01:40 +00:00
|
|
|
let random = Js.Math.random_int;
|