From 666508f22fae29d18a10e69732eaf22601020cde Mon Sep 17 00:00:00 2001 From: SANJEEVI UTHCHAV S Date: Sun, 31 May 2026 08:56:39 +0530 Subject: [PATCH 1/2] 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. --- machine_learning/cosine_similarity.py | 32 +++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 machine_learning/cosine_similarity.py diff --git a/machine_learning/cosine_similarity.py b/machine_learning/cosine_similarity.py new file mode 100644 index 000000000000..277210dfc1bb --- /dev/null +++ b/machine_learning/cosine_similarity.py @@ -0,0 +1,32 @@ +import math + +def cosine_similarity(vector_a: list[float], vector_b: list[float]) -> float: + """ + Finds the cosine similarity between two multi-dimensional vectors. + The result ranges from -1 (exactly opposite) to 1 (exactly the same). + + https://en.wikipedia.org/wiki/Cosine_similarity + + >>> cosine_similarity([1, 2, 3], [1, 2, 3]) + 1.0 + >>> cosine_similarity([1, 0], [0, 1]) + 0.0 + >>> cosine_similarity([1, 2, 3], [-1, -2, -3]) + -1.0 + """ + if len(vector_a) != len(vector_b): + raise ValueError("Vectors must be of the same length") + + dot_product = sum(a * b for a, b in zip(vector_a, vector_b)) + + magnitude_a = math.sqrt(sum(a * a for a in vector_a)) + magnitude_b = math.sqrt(sum(b * b for b in vector_b)) + + if magnitude_a == 0 or magnitude_b == 0: + raise ValueError("Cannot compute similarity with a zero-vector") + + return dot_product / (magnitude_a * magnitude_b) + +if __name__ == "__main__": + import doctest + doctest.testmod() From f7f44ff3294b159cfca394480889c9b8b064adad Mon Sep 17 00:00:00 2001 From: SANJEEVI UTHCHAV S Date: Sun, 31 May 2026 09:08:11 +0530 Subject: [PATCH 2/2] Enhance cosine_similarity.py with future annotations Added future annotations for type hints and fixed formatting. --- machine_learning/cosine_similarity.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/machine_learning/cosine_similarity.py b/machine_learning/cosine_similarity.py index 277210dfc1bb..cda0f24436c1 100644 --- a/machine_learning/cosine_similarity.py +++ b/machine_learning/cosine_similarity.py @@ -1,5 +1,8 @@ +from __future__ import annotations + import math + def cosine_similarity(vector_a: list[float], vector_b: list[float]) -> float: """ Finds the cosine similarity between two multi-dimensional vectors. @@ -18,7 +21,7 @@ def cosine_similarity(vector_a: list[float], vector_b: list[float]) -> float: raise ValueError("Vectors must be of the same length") dot_product = sum(a * b for a, b in zip(vector_a, vector_b)) - + magnitude_a = math.sqrt(sum(a * a for a in vector_a)) magnitude_b = math.sqrt(sum(b * b for b in vector_b)) @@ -27,6 +30,8 @@ def cosine_similarity(vector_a: list[float], vector_b: list[float]) -> float: return dot_product / (magnitude_a * magnitude_b) + if __name__ == "__main__": import doctest + doctest.testmod()