diff --git a/rust/numbrs/Cargo.toml b/rust/numbrs/Cargo.toml new file mode 100644 index 0000000..a1df943 --- /dev/null +++ b/rust/numbrs/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "numbrs" +version = "0.1.0" +edition = "2021" + +[dependencies] diff --git a/rust/numbrs/src/main.rs b/rust/numbrs/src/main.rs new file mode 100644 index 0000000..71bf5d2 --- /dev/null +++ b/rust/numbrs/src/main.rs @@ -0,0 +1,9 @@ +mod vecOps; + +fn main() { + println!("Hello, world!"); +} + +fn test() { + let ad = [1, 2, 3]; +} diff --git a/rust/numbrs/src/vecOps.rs b/rust/numbrs/src/vecOps.rs new file mode 100644 index 0000000..506231c --- /dev/null +++ b/rust/numbrs/src/vecOps.rs @@ -0,0 +1,24 @@ +pub fn addVecs<'a>(v1: &'a [f32], v2: &'a [f32]) -> Vec { + v1.iter().zip(v2).map(|(a, b)| a + b).collect() +} + +pub fn subVecs(v1: &[f32], v2: &[f32]) -> Vec { + v1.iter().zip(v2).map(|(a, b)| a - b).collect() +} + +pub fn normalizeVec(v1: &[f32]) -> Vec { + let l2Norm = normVec(v1); + mulScalVec(&l2Norm.powi(-1), v1) +} + +pub fn normVec(v1: &[f32]) -> f32 { + dotVecVec(v1, v1).powf(0.5) +} + +pub fn dotVecVec(v1: &[f32], v2: &[f32]) -> f32 { + v1.iter().zip(v2).map(|(a, b)| a * b).sum() +} + +pub fn mulScalVec<'a>(s: &'a f32, v1: &'a [f32]) -> Vec { + v1.iter().map(|a| a * s).collect() +}