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中文编码那些事
Jun 25 Python
python回调函数用法实例分析
May 09 Python
Python多进程并发(multiprocessing)用法实例详解
Jun 02 Python
完美解决python遍历删除字典里值为空的元素报错问题
Sep 11 Python
python3.6 实现AES加密的示例(pyCryptodome)
Jan 10 Python
Python实现合并同一个文件夹下所有PDF文件的方法示例
Apr 28 Python
在python 不同时区之间的差值与转换方法
Jan 14 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
pytorch的梯度计算以及backward方法详解
Jan 10 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
python全栈开发语法总结
Nov 22 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
Netflix将与CLAMP、乙一以及冲方丁等6名知名制作人合伙展开原创动画计划!
2020/03/06 日漫
点评山进PR-D3L三波段收音机
2021/03/02 无线电
php chr() ord()中文截取乱码问题解决方法
2008/09/08 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
『PHP』PHP截断函数mb_substr()使用介绍
2013/04/22 PHP
javascript 一段左右两边随屏滚动的代码
2009/06/18 Javascript
jquery.validate的使用说明介绍
2013/11/12 Javascript
Javascript函数的参数
2015/07/16 Javascript
JavaScript实现弹出DIV层同时页面背景渐变成半透明效果
2016/03/25 Javascript
javascript的replace方法结合正则使用实例总结
2016/06/16 Javascript
jquery插件uploadify多图上传功能实现代码
2016/08/12 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
jquery实现tab选项卡切换效果(悬停、下方横线动画位移)
2017/05/05 jQuery
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
JS的函数调用栈stack size的计算方法
2018/06/24 Javascript
基于vue中对鼠标划过事件的处理方式详解
2018/08/22 Javascript
jquery拖拽自动排序插件使用方法详解
2020/07/20 jQuery
借助云开发实现小程序短信验证码的发送
2020/01/06 Javascript
node.js使用yargs处理命令行参数操作示例
2020/02/11 Javascript
vue实现简单图片上传
2020/06/30 Javascript
使用setup.py安装python包和卸载python包的方法
2013/11/27 Python
本地文件上传到七牛云服务器示例(七牛云存储)
2014/01/11 Python
用python读写excel的方法
2014/11/18 Python
python 数字类型和字符串类型的相互转换实例
2018/07/17 Python
使用python生成杨辉三角形的示例代码
2018/08/29 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
PyTorch 解决Dataset和Dataloader遇到的问题
2020/01/08 Python
Python爬虫爬取博客实现可视化过程解析
2020/06/29 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
国际旅客访问北美最大的汽车租赁提供商:Alamo Rent A Car
2018/06/13 全球购物
Bally澳大利亚官网:瑞士奢侈品牌
2018/11/01 全球购物
汉米尔顿手表官网:Hamilton
2020/09/13 全球购物
2015年保险公司工作总结
2015/04/24 职场文书
2015学校图书管理员工作总结
2015/05/11 职场文书
公司董事任命书
2015/09/21 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL