• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Python 求向量的余弦值操作

    1、余弦相似度

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

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

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

    def cosVector(x,y):
      if(len(x)!=len(y)):
        print('error input,x and y is not in the same space')
        return;
      result1=0.0;
      result2=0.0;
      result3=0.0;
      for i in range(len(x)):
        result1+=x[i]*y[i]  #sum(X*Y)
        result2+=x[i]**2   #sum(X*X)
        result3+=y[i]**2   #sum(Y*Y)
      #print(result1)
      #print(result2)
      #print(result3)
      print("result is "+str(result1/((result2*result3)**0.5))) #结果显示
    cosVector([2,1],[1,1])

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

    #求余弦函数
    def cosVector(x,y):
      if(len(x)!=len(y)):
        print('error input,x and y is not in the same space')
        return;
      result1=0.0;
      result2=0.0;
      result3=0.0;
      for i in range(len(x)):
        result1+=x[i]*y[i]  #sum(X*Y)
        result2+=x[i]**2   #sum(X*X)
        result3+=y[i]**2   #sum(Y*Y)
      #print("result is "+str(result1/((result2*result3)**0.5))) #结果显示
      return result1/((result2*result3)**0.5)
    #print("result is ",cosVector([2,1],[1,1]))
     
    #计算query_output(60,20)和db_output(60,20)的余弦值,用60*1的向量存储 
    cosResult= [[0]*1 for i in range(60)] 
     
    for i in range(60):
      cosResult[i][0]=cosVector(query_output[i], db_output[i])
     
    print(cosResult)
    --------------------------------------------------------------------------------------------
    #计算query_output和db_output的余弦值,用60*1的向量存储
    rows=query_output.shape[0] #行数
    cols=query_output.shape[1] #列数
    cosResult= [[0]*1 for i in range(rows)] 
     
    for i in range(rows):
      cosResult[i][0]=cosVector(query_output[i], db_output[i])
     
    #print(cosResult)
    #将结果存入文件中,并且一行一个数字
    file=open('cosResult.txt','w')
    for i in cosResult:
     file.write(str(i).replace('[','').replace(']','')+'\n') #\r\n为换行符 
    file.close()

    补充:python实现余弦近似度

    方法一:

    def cos(vector1,vector2): 
      dot_product = 0.0 
      normA = 0.0 
      normB = 0.0 
      for a,b in zip(vector1,vector2): 
        dot_product += a*b 
        normA += a**2 
        normB += b**2 
      if normA == 0.0 or normB==0.0: 
        return None 
      else: 
        return 0.5 + 0.5 * dot_product / ((normA*normB)**0.5) #归一化 span style="font-family: Arial, Helvetica, sans-serif;">从[-1,1]到[0,1]/span>

    方法二:

    num = float(A.T * B) #若为行向量则 A * B.T
    denom = linalg.norm(A) * linalg.norm(B)
    cos = num / denom #余弦值
    sim = 0.5 + 0.5 * cos #归一化  从[-1,1]到[0,1]

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

    您可能感兴趣的文章:
    • Python 余弦相似度与皮尔逊相关系数 计算实例
    • python代码如何实现余弦相似性计算
    • 余弦相似性计算及python代码实现过程解析
    • Python绘制正余弦函数图像的方法
    • Python使用matplotlib绘制余弦的散点图示例
    • Python使用matplotlib绘制正弦和余弦曲线的方法示例
    • python实现余弦相似度文本比较的示例
    上一篇:django使用多个数据库的方法实例
    下一篇:python抢购软件/插件/脚本附完整源码
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Python 求向量的余弦值操作 Python,求,向量,的,余弦,值,