Skip to content

Instantly share code, notes, and snippets.

@xryuseix
Created June 8, 2021 01:25
Show Gist options
  • Save xryuseix/3ec35bb5c3a03e44d73aede3e8371cef to your computer and use it in GitHub Desktop.
Save xryuseix/3ec35bb5c3a03e44d73aede3e8371cef to your computer and use it in GitHub Desktop.
コサイン類似度の計算
fn cos_sim(q: &Vec<i32>, d: &Vec<i32>) -> f32 {
assert_eq!(q.len(), d.len());
// 分母
let mut dot = 0.0;
for i in 0..q.len() {
dot += (q[i] * d[i]) as f32;
}
// 分子左
let mut left = 0.0;
for i in 0..q.len() {
left += (q[i] * q[i]) as f32;
}
left = left.sqrt();
// 分子右
let mut right = 0.0;
for i in 0..d.len() {
right += (d[i] * d[i]) as f32;
}
right = right.sqrt();
return dot/(left*right);
}
fn main() {
let w1 = vec![3, 4, 1, 1, 3];
let w2 = vec![1, 2, 0, 4, 2];
let w3 = vec![2, 2, 4, 3, 4];
let cos_sim_12 = cos_sim(&w1, &w2);
let cos_sim_23 = cos_sim(&w2, &w3);
let cos_sim_13 = cos_sim(&w1, &w3);
println!("cos(w1,w2)={}", cos_sim_12);
println!("cos(w2,w3)={}", cos_sim_23);
println!("cos(w1,w3)={}", cos_sim_13);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment