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中列表的一些基本操作知识汇总
May 20 Python
Python脚本实现自动发带图的微博
Apr 27 Python
Python实现打印螺旋矩阵功能的方法
Nov 21 Python
Python查找两个有序列表中位数的方法【基于归并算法】
Apr 20 Python
Python里字典的基本用法(包括嵌套字典)
Feb 27 Python
Python中将两个或多个list合成一个list的方法小结
May 12 Python
Python装饰器原理与基本用法分析
Jan 07 Python
Django admin 实现search_fields精确查询实例
Mar 30 Python
Python爬虫Scrapy框架CrawlSpider原理及使用案例
Nov 20 Python
python二维图制作的实例代码
Dec 03 Python
python必学知识之文件操作(建议收藏)
May 30 Python
Python编程中内置的NotImplemented类型的用法
Mar 23 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中检查PHP文件是否有语法错误的方法
2009/12/23 PHP
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
eaglephp使用微信api接口开发微信框架
2014/01/09 PHP
laravel高级的Join语法详解以及使用Join多个条件
2019/10/16 PHP
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
理解Javascript_12_执行模型浅析
2010/10/18 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
如何实现textarea里的不同文本显示不同颜色
2014/01/20 Javascript
为开发者准备的10款最好的jQuery日历插件
2014/02/04 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
jQuery学习笔记之jQuery原型属性和方法
2014/06/09 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
JavaScript的类型、值和变量小结
2015/07/09 Javascript
jQuery实现的多级下拉菜单效果代码
2015/08/24 Javascript
Javascript实现图片懒加载插件的方法
2016/10/20 Javascript
给localStorage设置一个过期时间的方法分享
2018/11/06 Javascript
判断iOS、Android以及PC端的示例代码
2018/11/15 Javascript
详解Vue webapp项目通过HBulider打包原生APP(vue+webpack+HBulider)
2019/02/02 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
Python中的jquery PyQuery库使用小结
2014/05/13 Python
Python列表list数组array用法实例解析
2014/10/28 Python
Python内置函数dir详解
2015/04/14 Python
Django中日期处理注意事项与自定义时间格式转换详解
2018/08/06 Python
python生成器与迭代器详解
2019/01/01 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
使用python画出逻辑斯蒂映射(logistic map)中的分叉图案例
2020/12/11 Python
TensorFlow的环境配置与安装方法
2021/02/20 Python
让IE支持CSS3的不完全兼容方案
2014/09/19 HTML / CSS
澳大利亚百货商店中销量第一的商务衬衫品牌:Van Heusen
2018/07/26 全球购物
应用电子技术专业个人求职信
2013/09/21 职场文书
体育教育专业自荐信范文
2013/12/20 职场文书
入党积极分子评语
2014/05/04 职场文书
2016年端午节校园广播稿
2015/12/18 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
《LOL》“克隆大作战”久违归来 幻灵战队皮肤上线
2022/04/03 其他游戏