fuzzy_expert/
linspace.rs

1pub struct Linspace {
2    start: f64,
3    step: f64,
4    index: usize,
5    len: usize,
6}
7
8impl Linspace {
9    pub fn new(min: f64, max: f64, n: usize) -> Self {
10        let step = if n > 1 {
11            // REVIEW: try_from instead of cast?
12            let num_steps = (n - 1) as f64;
13            (max - min) / num_steps
14        } else {
15            0.
16        };
17        Linspace {
18            start: min,
19            step,
20            index: 0,
21            len: n,
22        }
23    }
24}
25
26impl Iterator for Linspace {
27    type Item = f64;
28
29    #[inline]
30    fn next(&mut self) -> Option<f64> {
31        if self.index >= self.len {
32            None
33        } else {
34            // Calculate the value just like numpy.linspace does
35            let i = self.index;
36            self.index += 1;
37            // REVIEW: try_from instead of cast?
38            Some(self.start + self.step * i as f64)
39        }
40    }
41
42    #[inline]
43    fn size_hint(&self) -> (usize, Option<usize>) {
44        let n = self.len - self.index;
45        (n, Some(n))
46    }
47}