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文本特征抽取与向量化算法学习
Dec 22 Python
Python自定义线程类简单示例
Mar 23 Python
python3解析库pyquery的深入讲解
Jun 26 Python
python一键去抖音视频水印工具
Sep 14 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
python元组和字典的内建函数实例详解
Oct 22 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
QML用PathView实现轮播图
Jun 03 Python
Python用K-means聚类算法进行客户分群的实现
Aug 23 Python
python 下载文件的几种方式分享
Apr 07 Python
解析目标检测之IoU
Jun 26 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
微信公众平台网页授权获取用户基本信息中授权回调域名设置的变动
2014/10/21 PHP
WordPress中查询文章的循环Loop结构及用法分析
2015/12/17 PHP
屏蔽PHP默认设置中的Notice警告的方法
2016/05/20 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
用js脚本控制asp.net下treeview的NodeCheck的实现代码
2010/03/02 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
JavaScript事件详细讲解
2016/06/27 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
Javascript typeof与instanceof的区别
2016/10/18 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
微信小程序 检查接口状态实例详解
2017/06/23 Javascript
vue实现样式之间的切换及vue动态样式的实现方法
2017/12/19 Javascript
使用JavaScript中的lodash编写双色球效果
2018/06/24 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
JavaScript实现表单注册、表单验证、运算符功能
2018/10/15 Javascript
layui table单元格事件修改值的方法
2019/09/24 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
详解JavaScript 中的批处理和缓存
2020/11/19 Javascript
[15:56]Heroes18_暗影萨满(完美)
2014/10/31 DOTA
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python中字典dict常用操作方法实例总结
2015/04/04 Python
python中numpy基础学习及进行数组和矢量计算
2017/02/12 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
简单了解django索引的相关知识
2019/07/17 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
基于pygame实现童年掌机打砖块游戏
2020/02/25 Python
Book Depository亚太地区:一家领先的国际图书零售商
2019/05/05 全球购物
教育局长自荐信范文
2013/12/22 职场文书
《识字五》教学反思
2014/03/01 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
2016年领导干部正风肃纪心得体会
2015/10/09 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
Go语言特点及基本数据类型使用详解
2022/03/21 Golang