|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
余弦相似度算法:一个向量空间中两个向量夹角间的余弦值作为衡量两个个体之间差异的大小,余弦值接近1,夹角趋于0,表明两个向量越相似,余弦值接近于0,夹角趋于90度,表明两个向量越不相似。
题目:用户输入N个D维向量(A1,A2,...,AD),(B1,B2,...,BD)...。
利用余弦相似度计算公式,分别计算N个向量之间得两两距离,并找出相似度最小的两个。
公式为:(ΣD(Ai+Bi))/((ΣD(Ai)ΣD(Bi))^1/2), (i的取值为1到D)
以下是我的代码:
ls_xl = []
ls_cos = []
N = 0
while True:
xl = input("请输入一个D维向量:(重复至输入n后停止输入)")
if xl == "n":
break
else:
ls_xl.append(xl)
N += 1
D = len(ls_xl[0])
def myfunc(a, b):
mu1, mu2, zi, cos = 0, 0, 0, 0
for i in range(D):
zi += float(a[i])*float(b[i])
mu1 += (float(a[i])**2)
mu2 += (float(b[i])**2)
cos = zi/((mu1**0.5)(mu2**0.5))
return cos
for m1 in range(N):
for n1 in range(N):
begin1 = myfunc(tuple(ls_xl[m1]), tuple(ls_xl[n1]))
ls_cos.append(begin1)
cos_min = min(ls_cos)
for m2 in range(N):
for n2 in range(N):
begin2 = myfunc(ls_xl[m2], ls_xl[n2])
if begin2 == cos_min:
print(ls_xl[m2], ls_xl[n2])
在不考虑运行效率的前提下,请指出错误,并对我的代码作尽量小的修正使其正确。
记住:改动要尽量最小!且不要引入第三方库。
更正完后注意细节,并自己检查运行一下保证没有错误。 |
|