您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Python 求向量的余弦值操作

51自学网 2021-10-30 22:53:25
  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') #/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.Tdenom = linalg.norm(A) * linalg.norm(B)cos = num / denom #余弦值sim = 0.5 + 0.5 * cos #归一化  从[-1,1]到[0,1]

以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。如有错误或未考虑完全的地方,望不吝赐教。


django使用多个数据库的方法实例
python抢购软件/插件/脚本附完整源码
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。