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根据距离和时长计算配速示例
Feb 16 Python
python获取一组汉字拼音首字母的方法
Jul 01 Python
Python将多份excel表格整理成一份表格
Jan 03 Python
Python操作MySQL数据库的方法
Jun 20 Python
在PyCharm中实现关闭一个死循环程序的方法
Nov 29 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
Python中的list与tuple集合区别解析
Oct 12 Python
django实现web接口 python3模拟Post请求方式
Nov 19 Python
Python基于tkinter canvas实现图片裁剪功能
Nov 05 Python
Pandas的数据过滤实现
Jan 15 Python
Python中json.load()和json.loads()有哪些区别
Jun 07 Python
Python实现科学占卜 让视频自动打码
Apr 09 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开发中的错误收集,不定期更新。
2011/02/03 PHP
php中adodbzip类实例
2014/12/08 PHP
thinkPHP3.x常量整理(预定义常量/路径常量/系统常量)
2016/05/20 PHP
项目中应用Redis+Php的场景
2016/05/22 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
2016/09/23 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
2017/09/27 PHP
Laravel5.1 框架Request请求操作常见用法实例分析
2020/01/04 PHP
Jquery升级新版本后选择器的语法问题
2010/06/02 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
学习jQuey中的return false
2015/12/18 Javascript
jQuery定义插件的方法
2015/12/18 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
微信小程序Server端环境配置详解(SSL, Nginx HTTPS,TLS 1.2 升级)
2017/01/12 Javascript
js控制按钮,防止频繁点击响应的实例
2017/02/15 Javascript
js中数组插入、删除元素操作的方法
2017/02/15 Javascript
详解微信小程序 通过控制CSS实现view隐藏与显示
2017/05/24 Javascript
vue如何判断dom的class
2018/04/26 Javascript
express+vue+mongodb+session 实现注册登录功能
2018/12/06 Javascript
微信小程序dom操作的替代思路实例分析
2018/12/06 Javascript
JavaScript cookie原理及使用实例
2020/05/08 Javascript
使用Python实现正态分布、正态分布采样
2019/11/20 Python
Python实现打印实心和空心菱形
2019/11/23 Python
关于jupyter打开之后不能直接跳转到浏览器的解决方式
2020/04/13 Python
Django获取model中的字段名和字段的verbose_name方式
2020/05/19 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
python通用数据库操作工具 pydbclib的使用简介
2020/12/21 Python
几道PHP的面试题
2012/05/19 面试题
酒店管理毕业生自荐信
2014/05/25 职场文书
2014教师党员个人自我评议
2014/09/20 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
导游欢迎词范文
2015/01/23 职场文书
资金申请报告范文
2015/05/14 职场文书
党员公开承诺书2016
2016/03/24 职场文书
Java各种比较对象的方式的对比总结
2021/06/20 Java/Android
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL