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读取Excel的方法实例分析
Jul 11 Python
PyQt5每天必学之布局管理
Apr 19 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
对Python中内置异常层次结构详解
Oct 18 Python
python 删除字符串中连续多个空格并保留一个的方法
Dec 22 Python
解决django服务器重启端口被占用的问题
Jul 26 Python
Python socket非阻塞模块应用示例
Sep 12 Python
python实现银行管理系统
Oct 25 Python
解决python gdal投影坐标系转换的问题
Jan 17 Python
tensorflow 重置/清除计算图的实现
Jan 19 Python
Pygame Rect区域位置的使用(图文)
Nov 17 Python
Python Matplotlib绘制等高线图与渐变色扇形图
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
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
Yii中CArrayDataProvider和CActiveDataProvider区别实例分析
2016/03/02 PHP
JavaScript使用prototype定义对象类型
2007/02/07 Javascript
JAVASCRIPT对象及属性
2007/02/13 Javascript
javascript变量作用域使用中常见错误总结
2013/03/26 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
百度移动版的url编码解码示例
2014/04/29 Javascript
js当前页面登录注册框,固定div,底层阴影的实例代码
2016/10/04 Javascript
基于jQuery实现照片墙自动播放特效
2017/01/12 Javascript
微信小程序 swiper制作tab切换实现附源码
2017/01/21 Javascript
vuex学习之Actions的用法详解
2017/08/29 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
Vue图片浏览组件v-viewer用法分析【支持旋转、缩放、翻转等操作】
2019/11/04 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
如何基于js判断浏览器版本
2020/02/20 Javascript
jQuery实现移动端图片上传预览组件的方法分析
2020/05/01 jQuery
[03:32]2014DOTA2西雅图邀请赛 CIS外卡赛赛前black专访
2014/07/09 DOTA
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
利用python发送和接收邮件
2016/09/27 Python
Python PyQt5标准对话框用法示例
2017/08/23 Python
Python中使用支持向量机(SVM)算法
2017/12/26 Python
Django 多语言教程的实现(i18n)
2018/07/07 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
详解python对象之间的交互
2020/09/29 Python
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
高中毕业生自我鉴定范文
2013/09/26 职场文书
初中军训感想300字
2014/03/05 职场文书
疾病防治方案
2014/05/31 职场文书
酒店管理失职检讨书
2014/09/16 职场文书
创业计划书之酒店
2019/08/30 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
centos8安装nginx1.9.1的详细过程
2021/08/02 Servers
PHP 时间处理类Carbon
2022/05/20 PHP
Linux服务器离线安装 nginx的详细步骤
2022/06/16 Servers