给定一个 n 维向量 Query−→−−− ,接下来会有 T 个相同维数的向量 Key−→− ,请你计算找出 Query−→−−− 的余弦相似度最大的 Key−→− ,并输出其余弦相似度,结果保留两位小数。
时间: 2024-05-12 17:19:09 浏览: 53
余弦相似度算法计算方法
余弦相似度可以通过向量的点积和模长来计算,具体公式如下:
$$\cos(\theta) = \frac{\vec{a}\cdot\vec{b}}{|\vec{a}|\cdot|\vec{b}|}$$
其中,$\vec{a}$ 和 $\vec{b}$ 分别为两个向量,$\cdot$ 表示点积,$|\vec{a}|$ 和 $|\vec{b}|$ 分别表示两个向量的模长,$\theta$ 表示两个向量之间的夹角。
对于本题,我们可以对每个 Key 向量计算其与 Query 向量的余弦相似度,并记录下最大值,同时记录下最大值对应的 Key 向量。最后输出最大值即可。
代码实现如下:
```python
import math
n = int(input())
query = list(map(float, input().split()))
t = int(input())
max_sim = -1
max_key = []
for i in range(t):
key = list(map(float, input().split()))
sim = sum([query[j]*key[j] for j in range(n)]) / (math.sqrt(sum([query[j]**2 for j in range(n)])) * math.sqrt(sum([key[j]**2 for j in range(n)])))
if sim > max_sim:
max_sim = sim
max_key = key
print('%.2f' % max_sim)
```
阅读全文