13 lines
366 B
Python
13 lines
366 B
Python
import math
|
|
|
|
|
|
def cosine_similarity(a: list[float], b: list[float]) -> float:
|
|
if not a or not b or len(a) != len(b):
|
|
return -1.0
|
|
dot = sum(x * y for x, y in zip(a, b))
|
|
norm_a = math.sqrt(sum(x * x for x in a))
|
|
norm_b = math.sqrt(sum(y * y for y in b))
|
|
if norm_a == 0 or norm_b == 0:
|
|
return -1.0
|
|
return dot / (norm_a * norm_b)
|