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使用Berkeley DB数据库实例
Sep 26 Python
详解Python字符串对象的实现
Dec 24 Python
Python判断文本中消息重复次数的方法
Apr 27 Python
python实现将一个数组逆序输出的方法
Jun 25 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
seek引发的python文件读写的问题及解决
Jul 26 Python
Django 多对多字段的更新和插入数据实例
Mar 31 Python
Python环境管理virtualenv&amp;virtualenvwrapper的配置详解
Jul 01 Python
Django模型验证器介绍与源码分析
Sep 08 Python
如何基于Python pygame实现动画跑马灯
Nov 18 Python
pyqt5打包成exe可执行文件的方法
May 14 Python
pytorch 如何使用batch训练lstm网络
May 28 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
joomla内置的表单验证功能使用方法
2010/06/11 PHP
php ci框架中加载css和js文件失败的原因及解决方法
2014/07/29 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
Zend Framework实现将session存储在memcache中的方法
2016/03/22 PHP
ThinkPHP中where()使用方法详解
2016/04/19 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
2017/08/03 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
js将json格式内容转换成对象的方法
2013/11/01 Javascript
chrome下jq width()方法取值为0的解决方法
2014/05/26 Javascript
微信小程序 swiper组件轮播图详解及实例
2016/11/16 Javascript
Vue.js路由组件vue-router使用方法详解
2016/12/02 Javascript
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
Angular实现下拉框模糊查询功能示例
2018/01/03 Javascript
js限制输入框只能输入数字(onkeyup触发)
2018/09/28 Javascript
Layui 解决表格异步调用后台分页的问题
2019/10/26 Javascript
js实现旋转木马轮播图效果
2020/01/10 Javascript
[52:03]Secret vs VG 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
在Python的Django框架中包装视图函数
2015/07/20 Python
Python中字符串的格式化方法小结
2016/05/03 Python
Python 3中print函数的使用方法总结
2017/08/08 Python
有趣的python小程序分享
2017/12/05 Python
Python实现的绘制三维双螺旋线图形功能示例
2018/06/23 Python
python数据化运营的重要意义
2019/11/25 Python
python实现猜数游戏
2020/03/27 Python
Html5应用程序缓存(Cache manifest)
2018/06/04 HTML / CSS
实习医生自我评价
2013/09/22 职场文书
房屋租赁合同解除协议书
2014/10/11 职场文书
联谊活动总结范文
2015/05/09 职场文书
美丽的大脚观后感
2015/06/03 职场文书
聘任合同书
2015/09/21 职场文书
2021年pycharm的最新安装教程及基本使用图文详解
2021/04/03 Python
80行代码写一个Webpack插件并发布到npm
2021/05/24 Javascript
pytorch 实现在测试的时候启用dropout
2021/05/27 Python