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实现的去除win下文本文件头部BOM的代码
Feb 10 Python
浅析Python的Django框架中的Memcached
Jul 23 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
在Python中pandas.DataFrame重置索引名称的实例
Nov 06 Python
Python函数的参数常见分类与用法实例详解
Mar 30 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 Python
Django认证系统user对象实现过程解析
Mar 02 Python
python中if及if-else如何使用
Jun 02 Python
pyecharts在数据可视化中的应用详解
Jun 08 Python
filter使用python3代码进行迭代元素的实例详解
Dec 03 Python
Python os和os.path模块详情
Apr 02 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
用mysql_fetch_array()获取当前行数据的方法详解
2013/06/05 PHP
Sublime里直接运行PHP配置方法
2014/11/28 PHP
php根据数据id自动生成编号的实现方法
2016/10/16 PHP
Laravel框架控制器的request与response用法示例
2019/09/30 PHP
Javascript调用XML制作连动下拉列表框
2006/06/25 Javascript
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
jquery插件制作 手风琴Panel效果实现
2012/08/17 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
jQuery中last()方法用法实例
2015/01/06 Javascript
浅析JavaScript事件和方法
2015/02/28 Javascript
js表单元素checked、radio被选中的几种方法(详解)
2016/08/22 Javascript
动态JavaScript所造成一些你不知道的危害
2016/09/25 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
JS实现的DIV块来回滚动效果示例
2017/02/07 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
Web技术实现移动监测的介绍
2017/09/18 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
如何基于JS截获动态代码
2019/12/25 Javascript
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Django模板变量如何传递给外部js调用的方法小结
2017/07/24 Python
Python数据类型之List列表实例详解
2019/05/08 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
什么是Python中的匿名函数
2020/06/02 Python
scrapy结合selenium解析动态页面的实现
2020/09/28 Python
银河香水:Galaxy Perfume
2019/03/25 全球购物
Audible英国:有声读物,30天免费试用
2019/10/16 全球购物
尽职尽责村干部自我鉴定
2014/01/23 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
厂办主管岗位职责范本
2014/02/28 职场文书
环保公益广告语
2014/03/13 职场文书
古汉语文学求职信范文
2014/03/16 职场文书
职业规划实施方案
2014/06/10 职场文书
低碳环保标语
2014/06/12 职场文书
英语课外活动总结
2014/08/27 职场文书
医学检验专业自荐信
2014/09/18 职场文书
工作总结与自我评价
2014/09/18 职场文书