Module: SemanticCache::Similarity
- Defined in:
- lib/semantic_cache/similarity.rb
Class Method Summary collapse
-
.cosine(vec_a, vec_b) ⇒ Object
Compute cosine similarity between two vectors.
Class Method Details
.cosine(vec_a, vec_b) ⇒ Object
Compute cosine similarity between two vectors. Returns a Float between -1.0 and 1.0.
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# File 'lib/semantic_cache/similarity.rb', line 9 def cosine(vec_a, vec_b) return 0.0 if vec_a.empty? || vec_b.empty? raise ArgumentError, "Vectors must be the same length" unless vec_a.length == vec_b.length dot_product = 0.0 magnitude_a = 0.0 magnitude_b = 0.0 vec_a.length.times do |i| a = vec_a[i] b = vec_b[i] dot_product += a * b magnitude_a += a * a magnitude_b += b * b end denominator = Math.sqrt(magnitude_a) * Math.sqrt(magnitude_b) return 0.0 if denominator.zero? dot_product / denominator end |