dendritic_ndarray/ops/
scalar.rs

1use crate::ndarray::NDArray;
2
3
4pub trait ScalarOps {
5    fn scalar_subtract(&self, scalar: f64) -> Result<NDArray<f64>, String>;
6    fn scalar_mult(&self, scalar: f64) -> Result<NDArray<f64>, String>;
7    fn scalar_add(&self, scalar: f64) -> Result<NDArray<f64>, String>;
8    fn scalar_div(&self, scalar: f64) -> Result<NDArray<f64>, String>; 
9}
10
11
12impl ScalarOps for NDArray<f64> {
13
14    /// Subtract all values in ndarray by scalar
15    fn scalar_subtract(&self, scalar: f64) -> Result<NDArray<f64>, String> {
16        let mut result = NDArray::new(self.shape().values()).unwrap();
17        for index in 0..self.size() {
18            let value = self.values()[index] - scalar; 
19            let _ = result.set_idx(index, value);
20        }
21        Ok(result)
22    }
23
24
25    /// Add all values in ndarray by scalar
26    fn scalar_add(&self, scalar: f64) -> Result<NDArray<f64>, String> {
27        let mut result = NDArray::new(self.shape().values()).unwrap();
28        for index in 0..self.size() {
29            let value = self.values()[index] + scalar; 
30            let _ = result.set_idx(index, value);
31        }
32        Ok(result)
33    }
34
35
36    /// Multiply all values in ndarray by scalar
37    fn scalar_mult(&self, scalar: f64) -> Result<NDArray<f64>, String> {
38        let mut result = NDArray::new(self.shape().values()).unwrap();
39        for index in 0..self.size() {
40            let value = self.values()[index] * scalar; 
41            let _ = result.set_idx(index, value);
42        }
43        Ok(result)
44    }
45
46
47    /// Divide all values in ndarray by scalar
48    fn scalar_div(&self, scalar: f64) -> Result<NDArray<f64>, String> {
49        let mut result = NDArray::new(self.shape().values()).unwrap();
50        for index in 0..self.size() {
51            let value = self.values()[index] / scalar; 
52            let _ = result.set_idx(index, value);
53        }
54        Ok(result)
55    }
56
57}