题目
余弦相似度是一种衡量两个向量之间相似度的方法,其计算公式为:
c
o
s
i
n
e
s
i
m
i
l
a
r
i
t
y
=
A
⋅
B
∣
∣
A
∣
∣
⋅
∣
∣
B
∣
∣
cosine\ similarity = \frac{A \cdot B}{||A|| \cdot ||B||}
cosine similarity=∣∣A∣∣⋅∣∣B∣∣A⋅B
其中,
A
A
A 和
B
B
B 是两个向量,
∣
∣
A
∣
∣
||A||
∣∣A∣∣ 和
∣
∣
B
∣
∣
||B||
∣∣B∣∣ 是向量
A
A
A 和
B
B
B 的模。本式子其实大家十分熟悉,在高中数学中就已经接触过。是用来计算两个向量之间的夹角的余弦值。
标准代码如下
def cosine_similarity(v1, v2):
if v1.shape != v2.shape:
raise ValueError("Arrays must have the same shape")
if v1.size == 0:
raise ValueError("Arrays cannot be empty")
v1_flat = v1.flatten()
v2_flat = v2.flatten()
dot_product = np.dot(v1_flat, v2_flat)
magnitude1 = np.sqrt(np.sum(v1_flat**2))
magnitude2 = np.sqrt(np.sum(v2_flat**2))
if magnitude1 == 0 or magnitude2 == 0:
raise ValueError("Vectors cannot have zero magnitude")
return round(dot_product / (magnitude1 * magnitude2), 3)