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开发的单词频率统计工具wordsworth使用方法
Jun 25 Python
利用Django框架中select_related和prefetch_related函数对数据库查询优化
Apr 01 Python
Python批量修改文本文件内容的方法
Apr 29 Python
python实现电脑自动关机
Jun 20 Python
Python中的类与类型示例详解
Jul 10 Python
django框架用户权限中的session缓存到redis中的方法
Aug 06 Python
PyCharm2019安装教程及其使用(图文教程)
Sep 29 Python
Python调用钉钉自定义机器人的实现
Jan 03 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
python模拟实现分发扑克牌
Apr 22 Python
解决Python3.8运行tornado项目报NotImplementedError错误
Sep 02 Python
matplotlib 范围选区(SpanSelector)的使用
Feb 24 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
PHP+APACHE实现用户论证的方法
2006/10/09 PHP
php下一个阿拉伯数字转中文数字的函数
2007/07/16 PHP
php in_array 函数使用说明与in_array需要注意的地方说明
2010/04/13 PHP
php设计模式 Command(命令模式)
2011/06/26 PHP
第五章 php数组操作
2011/12/30 PHP
PHP实现文件下载断点续传详解
2014/10/15 PHP
php数组转成json格式的方法
2015/03/09 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
基于Asp.net与Javascript控制的日期控件
2010/05/22 Javascript
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
关于动态执行代码(js的Eval)实例详解
2016/08/15 Javascript
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
通过npm引用的vue组件使用详解
2017/03/02 Javascript
jQuery UI Grid 模态框中的表格实例代码
2017/04/01 jQuery
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
[58:46]OG vs NAVI 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
python如何为创建大量实例节省内存
2018/03/20 Python
Python PyQt4实现QQ抽屉效果
2018/04/20 Python
Python实现插入排序和选择排序的方法
2019/05/12 Python
Django框架使用mysql视图操作示例
2019/05/15 Python
使用OpenCV实现仿射变换—平移功能
2019/08/29 Python
Python爬虫爬取煎蛋网图片代码实例
2019/12/16 Python
Python生成词云的实现代码
2020/01/14 Python
Spanx塑身衣官网:美国知名内衣品牌
2017/01/11 全球购物
NYX Professional Makeup官方网站:专业彩妆和美容产品
2019/10/29 全球购物
个人务虚会发言材料
2014/10/20 职场文书
家属答谢词
2015/01/05 职场文书
继承公证书格式
2015/01/26 职场文书
负责培养人意见
2015/06/05 职场文书
田径运动会广播稿
2015/08/19 职场文书
golang判断key是否在map中的代码
2021/04/24 Golang
解决pytorch-gpu 安装失败的记录
2021/05/24 Python
Win10 Anaconda安装python-pcl
2022/04/29 Servers