Python 求向量的余弦值操作


Posted in Python onMarch 04, 2021

1、余弦相似度

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

Python 求向量的余弦值操作

余弦相似度的取值为[-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实现马耳可夫链算法实例分析
May 20 Python
解决nohup重定向python输出到文件不成功的问题
May 11 Python
Django中的文件的上传的几种方式
Jul 23 Python
python训练数据时打乱训练数据与标签的两种方法小结
Nov 08 Python
Python3 JSON编码解码方法详解
Sep 06 Python
python系列 文件操作的代码
Oct 06 Python
PyCharm下载和安装详细步骤
Dec 17 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
Mar 11 Python
简单了解python列表和元组的区别
May 14 Python
keras的siamese(孪生网络)实现案例
Jun 12 Python
PyCharm上安装Package的实现(以pandas为例)
Sep 18 Python
浅谈Python响应式类库RxPy
Jun 14 Python
django使用多个数据库的方法实例
Mar 04 #Python
Python使用paramiko连接远程服务器执行Shell命令的实现
Mar 04 #Python
Python 调用C++封装的进一步探索交流
Mar 04 #Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 #Python
Python与C/C++的相互调用案例
Mar 04 #Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 #Python
关于PySnooper 永远不要使用print进行调试的问题
Mar 04 #Python
You might like
destoon文章模块调用企业会员资料的方法
2014/08/22 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
浅谈Laravel队列实现原理解决问题记录
2017/08/19 PHP
js 单引号 传递方法
2009/06/22 Javascript
jQuery+css实现百度百科的页面导航效果
2014/12/16 Javascript
基于Jquery实现焦点图淡出淡入效果
2015/11/30 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
基于Turn.js 实现翻书效果实例解析
2016/06/20 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
Vue文件配置全局变量的实例
2018/09/06 Javascript
解决vue无法设置滚动位置的问题
2018/10/07 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
微信小程序实现分享商品海报功能
2019/09/30 Javascript
Vue实现简单的跑马灯
2020/05/25 Javascript
JS实现躲避粒子小游戏
2020/06/18 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
vue实现简单全选和反选功能
2020/09/15 Javascript
[48:18]DOTA2-DPC中国联赛 正赛 RNG vs Dynasty BO3 第二场 1月29日
2021/03/11 DOTA
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
python机器学习理论与实战(六)支持向量机
2018/01/19 Python
使用python Telnet远程登录执行程序的方法
2019/01/26 Python
Django 自定义权限管理系统详解(通过中间件认证)
2020/03/11 Python
PyCharm设置Ipython交互环境和宏快捷键进行数据分析图文详解
2020/04/23 Python
python全栈开发语法总结
2020/11/22 Python
Python实现邮件发送的详细设置方法(遇到问题)
2021/01/18 Python
HTML5 常见面试题之PC端和移动端区别介绍
2018/01/22 HTML / CSS
输入N,打印N*N矩阵
2012/02/20 面试题
Python里面如何拷贝一个对象
2014/02/17 面试题
机械设计专业应届生求职信
2013/11/21 职场文书
金属材料工程个人求职的自我评价
2013/12/04 职场文书
超市总经理岗位职责
2014/02/02 职场文书
责任胜于能力演讲稿
2014/05/20 职场文书
nginx配置proxy_pass中url末尾带/与不带/的区别详解
2021/03/31 Servers
python数据处理之Pandas类型转换
2022/04/28 Python