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 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 let i = self.index;
36 self.index += 1;
37 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}