当前位置:网站首页>cosine 相似度计算总结

cosine 相似度计算总结

2022-06-10 23:56:00 qq_45759229

随机产生数据

import torch 
import numpy as np 

xx=np.random.randn(4,5)
yy=np.random.randn(7,5)

# xx=np.array([[1,2,3],[2,3,4]])
# yy=np.array([[2,1,2],[4,2,1],[3,3,3]])


x=torch.from_numpy(xx).type(torch.float64)
y=torch.from_numpy(yy).type(torch.float64)
#cosine_sim(x,y)

cosine相似度计算方法1

res1=np.zeros((xx.shape[0],yy.shape[1]))
for i in range(xx.shape[0]):
    for j in range(yy.shape[1]):
        ii=xx[i]
        jj=yy[j]
        res1[i,j]=np.dot(ii,jj)/np.sqrt(sum(ii**2))/np.sqrt(sum(jj**2))
print(res1)

结果如下
在这里插入图片描述

cosine相似度计算方法2

import numpy as np
from sklearn.metrics.pairwise import cosine_similarity, paired_distances
res2=cosine_similarity(xx,yy)
print(res2)

结果如下
在这里插入图片描述

cosine相似度计算方法3

import torch 
import numpy as np 

def cosine_sim(x, y):
    x = x / torch.norm(x, dim=1, keepdim=True)
    y = y / torch.norm(y, dim=1, keepdim=True)
    sim = torch.matmul(x, torch.transpose(y, 0, 1))

    return sim

x=torch.from_numpy(xx).type(torch.float64)
y=torch.from_numpy(yy).type(torch.float64)
res3=cosine_sim(x,y)
print(res3)

结果如下
在这里插入图片描述

cosine相似度计算方法4

import torch.nn.functional as F

C = F.cosine_similarity(x.unsqueeze(1), y, dim=-1)
print(C)
print(C.shape)
# torch.size([2,10])

结果如下
在这里插入图片描述

cosine相似度计算方法5

from scipy.spatial.distance import cdist
res5=1-cdist(xx,yy,metric="cosine") # 先计算距离,再计算相似度
print(res5)

结果如下
在这里插入图片描述

特殊情况1,计算pair_X和pair_Y之间对应的cosine相似度(待补充)

# ## 
# # Import the required library
# import torch

# # define two input tensors
# tensor1 = torch.randn(3,4)
# tensor2 = torch.randn(3,4)

# # print above defined two tensors
# print("Tensor 1:\n", tensor1)
# print("Tensor 2:\n", tensor2)

# # define a method to measure cosine similarity in dim 0
# cos0 = torch.nn.CosineSimilarity(dim=0)
# output0 = cos0(tensor1, tensor2)
# print("Cosine Similarity in dim 0:\n",output0)

# # define a method to measure cosine similarity in dim 1
# cos1 = torch.nn.CosineSimilarity(dim=1)
# output1 = cos1(tensor1, tensor2)
# print("Cosine Similarity in dim 1:\n",output1)

# import torch.nn as nn
# input1 = torch.randn(10, 128)
# input2 = torch.randn(10, 128)
# cos = nn.CosineSimilarity(dim=1, eps=1e-6)
# output = cos(input1, input2)
# print(output)

# xx=input1.numpy()
# yy=input2.numpy()
# from scipy.spatial.distance import cdist
# output2=cdist(xx,yy,metric="cosine")
# output2

特殊情况2,计算自身X与X的cosine相似度(待补充)

##
##
原网站

版权声明
本文为[qq_45759229]所创,转载请带上原文链接,感谢
https://blog.csdn.net/qq_45759229/article/details/125227192