|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
python题目:计算余弦相似度
余弦相似度算法: 一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
题目:用户输入N个D维向量A,....) ,B........利用余弦相似度计算公式,分别计算N个向量之间得两两距离,并找出相似度最小的两个。
首先,我们需要明确一下输入向量的格式。假设用户输入的N个D维向量都是以列表的形式表示,例如:
A = [a1, a2, ..., aD]
B = [b1, b2, ..., bD]
其中ai和bi分别表示向量A和B在第i个维度上的取值。
接下来,我们可以编写一个函数来计算两个向量之间的余弦相似度。可以使用numpy库来进行向量运算,因此需要安装numpy库。
- import numpy as np
- def cosine_similarity(vector1, vector2):
- dot_product = np.dot(vector1, vector2)
- norm1 = np.linalg.norm(vector1)
- norm2 = np.linalg.norm(vector2)
- similarity = dot_product / (norm1 * norm2)
- return similarity
复制代码
在这个函数中,我们使用`np.dot()`函数计算两个向量的点积,使用`np.linalg.norm()`函数计算向量的范数,然后将点积除以范数的乘积得到余弦相似度。
接下来,我们可以编写主程序来实现用户输入N个向量,并计算两两向量之间的相似度。
- N = int(input("请输入向量个数:"))
- D = int(input("请输入向量维度:"))
- vectors = []
- for i in range(N):
- vector = []
- for j in range(D):
- value = float(input("请输入第{}个向量的第{}个维度的取值:".format(i+1, j+1)))
- vector.append(value)
- vectors.append(vector)
- min_similarity = 1
- min_vectors = []
- for i in range(N):
- for j in range(i+1, N):
- similarity = cosine_similarity(vectors[i], vectors[j])
- if similarity < min_similarity:
- min_similarity = similarity
- min_vectors = [vectors[i], vectors[j]]
- print("最小的相似度为:", min_similarity)
- print("对应的两个向量分别为:", min_vectors)
复制代码
在主程序中,我们使用两层循环遍历所有的向量组合,并调用`cosine_similarity()`函数计算它们的相似度。如果找到了更小的相似度,则更新最小相似度和对应的向量。
最后,输出最小相似度和对应的两个向量。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
|
|