1use crate::MutVecg;
2use indxvec::Vecops;
3
4impl MutVecg for &mut [f64] {
6 fn mutsmult<U:PartialOrd+Into<f64>>(self, s: U)
8 {
9 let sf = s.into();
10 self.iter_mut().for_each(|x| *x *= sf);
11 }
12
13 fn mutvsub<U:Clone+PartialOrd+Into<f64>>(self, v: &[U])
15 {
16 self.iter_mut()
17 .zip(v)
18 .for_each(|(x, vi)| *x -= vi.clone().into())
19 }
20
21 fn mutvadd<U:Clone+PartialOrd+Into<f64>>(self, v: &[U])
23 {
24 self.iter_mut()
25 .zip(v)
26 .for_each(|(x, vi)| *x += vi.clone().into())
27 }
28
29 fn minvert(self) {
31 let recmag2 = 1.0 / self.iter().map(|&x| x.powi(2)).sum::<f64>();
32 for c in self.iter_mut() {
33 *c *= recmag2
34 }
35 }
36
37 fn mneg(self) {
39 for c in self.iter_mut() {
40 *c *= -1_f64
41 }
42 }
43
44 fn munit(self) {
46 let m = (1.0 / self.iter().map(|&x| x.powi(2)).sum::<f64>()).sqrt();
47 for c in self.iter_mut() {
48 *c *= m
49 }
50 }
51
52 fn mlintrans(self) {
54 let mm = self.minmax();
55 let range = mm.max - mm.min;
56 for c in self.iter_mut() {
57 *c = (*c - mm.min) / range
58 }
59 }
60}