aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/embedders/vecmetric.rs12
1 files changed, 10 insertions, 2 deletions
diff --git a/src/embedders/vecmetric.rs b/src/embedders/vecmetric.rs
index 474a6d0..0c63911 100644
--- a/src/embedders/vecmetric.rs
+++ b/src/embedders/vecmetric.rs
@@ -18,8 +18,16 @@ impl VecMetric for ManhattenDistance {}
#[rustfmt::skip] impl From<Vec<f32>> for ManhattenDistance { fn from(value: Vec<f32>) -> Self { Self(value) } }
impl MetricElem for CosineSimilarity {
- fn dist(&self, _other: &Self) -> f64 {
- todo!()
+ fn dist(&self, other: &Self) -> f64 {
+ let x = self
+ .0
+ .iter()
+ .zip(other.0.iter())
+ .map(|(a, b)| *a * *b)
+ .sum::<f32>();
+ let mag_a = self.0.iter().map(|x| x.powi(2)).sum::<f32>();
+ let mag_b = other.0.iter().map(|x| x.powi(2)).sum::<f32>();
+ (x / (mag_a * mag_b).sqrt()) as f64
}
}
impl MetricElem for EuclidianDistance {