Python怎样求2个向量间的余弦值?
Admin 2021-04-29 群英技术资讯 1432 次浏览
余弦相似度衡量的是2个向量间的夹角大小,通过夹角的余弦值表示结果,因此2个向量的余弦相似度为:

余弦相似度的取值为[-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相关内容大家可以关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍了python密码学简单替代密码解密及测试教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
可通过正则表达式来提取字符串中的数字。用法:\d 匹配任意数字;\d+ 匹配1次或者多次数字;\.? 匹配小数点;\d* 匹配小数点之后的数字,等等。
这篇文章主要为大家详细介绍了python实现人人对战的五子棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
Python 中使用线程有两种方式:函数或者用类来包装线程对象。函数式:调用 _thread 模块中的 start_new_thread() 函数来产生新线程。
在很多企业会使用闲置的 Windows 机器作为临时服务器,有时候我们想远程调用里面的程序或查看日志文件。本文分享了利用Python远程控制Windows服务器的方法,感兴趣的可以学习一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008