Python 求向量的余弦值操作

这篇文章主要介绍了Python 求向量的余弦值操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

1、余弦相似度

余弦相似度衡量的是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') #rn为换行符 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) #归一化 从[-1,1]到[0,1]

方法二:

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]

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...