这个错误是因为你在计算余弦相似度时,将向量的元素当作字符串进行了计算,而不是将其转换为浮点数进行计算。你需要修改一下代码中的myfunc函数。具体修改如下: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
在myfunc函数中,通过a[i]和b[i]来获取向量a和b的第i个元素,并将其转换为浮点数进行计算。
另外,在计算余弦相似度时,你的循环条件应该是m1和n1,而不是固定的range(N)。修改为如下所示:for m1 in range(N): #计算出每两个向量间的余弦相似度 for n1 in range(N): begin1 = myfunc(ls_xl[m1], ls_xl[n1]) # 将传入myfunc函数的参数改为对应的向量 ls_cos.append(begin1)
最后,在找到最小的余弦相似度对应的两个向量时,你应该用索引来获取对应的向量,并且只打印一次即可。修改为如下所示: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]) # 打印对应的向量即可 break # 结束内层循环,因为已经找到了符合条件的最小相似度对应的向量
希望这些修改能够解决你的问题!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |