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实现猜数字游戏(无重复数字)示例分享
Mar 29 Python
详解Python中的strftime()方法的使用
May 22 Python
python中requests小技巧
May 10 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
python实现手机销售管理系统
Mar 19 Python
Python列表对象实现原理详解
Jul 01 Python
python3中eval函数用法使用简介
Aug 02 Python
python2.7的flask框架之引用js&amp;css等静态文件的实现方法
Aug 22 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
python开发入门——set的使用
Sep 03 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 Python
深度学习详解之初试机器学习
Apr 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
PHP采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
PHP实现的数独求解问题示例
2017/04/18 PHP
推荐11款jQuery开发的复选框和单选框美化插件
2011/08/02 Javascript
js中replace的用法总结
2013/12/27 Javascript
自定义百度分享的分享按钮
2015/03/18 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JS中页面与页面之间超链接跳转中文乱码问题的解决办法
2016/12/15 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
javascript计算渐变颜色的实例
2017/09/22 Javascript
webpack+vue-cil中proxyTable处理跨域的方法
2018/07/20 Javascript
[04:44]DOTA2西游记战队视频彩蛋流出 师徒开黑巧遇林书豪
2016/08/03 DOTA
Python 关于反射和类的特殊成员方法
2017/09/14 Python
python编程实现12306的一个小爬虫实例
2017/12/27 Python
Python复制Word内容并使用格式设字体与大小实例代码
2018/01/22 Python
Python基于递归算法实现的汉诺塔与Fibonacci数列示例
2018/04/18 Python
Python实现读取机器硬件信息的方法示例
2018/06/09 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
pycharm实现猜数游戏
2020/12/07 Python
VSCode 自定义html5模板的实现
2019/12/05 HTML / CSS
英国自行车商店:AW Cycles
2021/02/24 全球购物
优秀大学生的自我评价
2014/01/16 职场文书
支部鉴定材料
2014/06/02 职场文书
汽修专业自荐信
2014/07/07 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
2014年评职称工作总结
2014/11/20 职场文书
投资公司董事长岗位职责
2015/04/16 职场文书
如何用PHP实现多线程编程
2021/05/26 PHP
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL
Python实现GIF动图以及视频卡通化详解
2021/12/06 Python
ICOM R71E和R72E图文对比解说
2022/04/07 无线电
python神经网络ResNet50模型
2022/05/06 Python