Skip to content

Commit 666508f

Browse files
authored
Implement cosine similarity function in Python
This function calculates the cosine similarity between two vectors, raising errors for mismatched lengths or zero-vectors. It includes doctests for validation.
1 parent 456d644 commit 666508f

1 file changed

Lines changed: 32 additions & 0 deletions

File tree

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import math
2+
3+
def cosine_similarity(vector_a: list[float], vector_b: list[float]) -> float:
4+
"""
5+
Finds the cosine similarity between two multi-dimensional vectors.
6+
The result ranges from -1 (exactly opposite) to 1 (exactly the same).
7+
8+
https://en.wikipedia.org/wiki/Cosine_similarity
9+
10+
>>> cosine_similarity([1, 2, 3], [1, 2, 3])
11+
1.0
12+
>>> cosine_similarity([1, 0], [0, 1])
13+
0.0
14+
>>> cosine_similarity([1, 2, 3], [-1, -2, -3])
15+
-1.0
16+
"""
17+
if len(vector_a) != len(vector_b):
18+
raise ValueError("Vectors must be of the same length")
19+
20+
dot_product = sum(a * b for a, b in zip(vector_a, vector_b))
21+
22+
magnitude_a = math.sqrt(sum(a * a for a in vector_a))
23+
magnitude_b = math.sqrt(sum(b * b for b in vector_b))
24+
25+
if magnitude_a == 0 or magnitude_b == 0:
26+
raise ValueError("Cannot compute similarity with a zero-vector")
27+
28+
return dot_product / (magnitude_a * magnitude_b)
29+
30+
if __name__ == "__main__":
31+
import doctest
32+
doctest.testmod()

0 commit comments

Comments
 (0)