add vec ops to numbrs
This commit is contained in:
6
rust/numbrs/Cargo.toml
Normal file
6
rust/numbrs/Cargo.toml
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
[package]
|
||||||
|
name = "numbrs"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
9
rust/numbrs/src/main.rs
Normal file
9
rust/numbrs/src/main.rs
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
mod vecOps;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
println!("Hello, world!");
|
||||||
|
}
|
||||||
|
|
||||||
|
fn test() {
|
||||||
|
let ad = [1, 2, 3];
|
||||||
|
}
|
||||||
24
rust/numbrs/src/vecOps.rs
Normal file
24
rust/numbrs/src/vecOps.rs
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
pub fn addVecs<'a>(v1: &'a [f32], v2: &'a [f32]) -> Vec<f32> {
|
||||||
|
v1.iter().zip(v2).map(|(a, b)| a + b).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn subVecs(v1: &[f32], v2: &[f32]) -> Vec<f32> {
|
||||||
|
v1.iter().zip(v2).map(|(a, b)| a - b).collect()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn normalizeVec(v1: &[f32]) -> Vec<f32> {
|
||||||
|
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<f32> {
|
||||||
|
v1.iter().map(|a| a * s).collect()
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user