Python求向量的余弦值

﹏ヽ暗。殇╰゛Y 2022-05-26 10:28 249阅读 0赞

1、余弦相似度

余弦相似度衡量的是2个向量间的夹角大小,通过夹角的余弦值表示结果,因此2个向量的余弦相似度为:

  1. ![70][]

cosθ=A⋅B||A||∗||B||(1) 70 1

余弦相似度的取值为[-1,1],值越大表示越相似。

向量夹角的余弦公式很简单,不在此赘述,直接上代码:

  1. def cosVector(x,y):
  2. if(len(x)!=len(y)):
  3. print('error input,x and y is not in the same space')
  4. return;
  5. result1=0.0;
  6. result2=0.0;
  7. result3=0.0;
  8. for i in range(len(x)):
  9. result1+=x[i]*y[i] #sum(X*Y)
  10. result2+=x[i]**2 #sum(X*X)
  11. result3+=y[i]**2 #sum(Y*Y)
  12. #print(result1)
  13. #print(result2)
  14. #print(result3)
  15. print("result is "+str(result1/((result2*result3)**0.5))) #结果显示
  16. cosVector([2,1],[1,1])

一个计算二维数组余弦值的例子:

  1. #求余弦函数
  2. def cosVector(x,y):
  3. if(len(x)!=len(y)):
  4. print('error input,x and y is not in the same space')
  5. return;
  6. result1=0.0;
  7. result2=0.0;
  8. result3=0.0;
  9. for i in range(len(x)):
  10. result1+=x[i]*y[i] #sum(X*Y)
  11. result2+=x[i]**2 #sum(X*X)
  12. result3+=y[i]**2 #sum(Y*Y)
  13. #print("result is "+str(result1/((result2*result3)**0.5))) #结果显示
  14. return result1/((result2*result3)**0.5)
  15. #print("result is ",cosVector([2,1],[1,1]))
  16. #计算query_output(60,20)和db_output(60,20)的余弦值,用60*1的向量存储
  17. cosResult= [[0]*1 for i in range(60)]
  18. for i in range(60):
  19. cosResult[i][0]=cosVector(query_output[i], db_output[i])
  20. print(cosResult)
  21. --------------------------------------------------------------------------------------------
  22. #计算query_output和db_output的余弦值,用60*1的向量存储
  23. rows=query_output.shape[0] #行数
  24. cols=query_output.shape[1] #列数
  25. cosResult= [[0]*1 for i in range(rows)]
  26. for i in range(rows):
  27. cosResult[i][0]=cosVector(query_output[i], db_output[i])
  28. #print(cosResult)
  29. #将结果存入文件中,并且一行一个数字
  30. file=open('cosResult.txt','w')
  31. for i in cosResult:
  32. file.write(str(i).replace('[','').replace(']','')+'\n') #\r\n为换行符
  33. file.close()

发表评论

表情:
评论列表 (有 0 条评论,249人围观)

还没有评论,来说两句吧...

相关阅读