From 09fac0785e7e24ae0f85b85f3765df3e9b3238a5 Mon Sep 17 00:00:00 2001 From: Phani Pavan K Date: Sat, 17 Aug 2024 13:00:21 +0530 Subject: [PATCH] add vec ops to numbrs --- rust/numbrs/Cargo.toml | 6 ++++++ rust/numbrs/src/main.rs | 9 +++++++++ rust/numbrs/src/vecOps.rs | 24 ++++++++++++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 rust/numbrs/Cargo.toml create mode 100644 rust/numbrs/src/main.rs create mode 100644 rust/numbrs/src/vecOps.rs 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() +}