我想计算两个列表之间的余弦相似度,比如说,列表1是dataSetI,列表2是dataSetII。
假设dataSetI是[3,45,7,2],dataSetII是[2,54,13,15]。列表的长度总是相等的。我想将余弦相似度报告为0到1之间的数。
dataSetI = [3, 45, 7, 2]
dataSetII = [2, 54, 13, 15]
def cosine_similarity(list1, list2):
# How to?
pass
print(cosine_similarity(dataSetI, dataSetII))
如果你碰巧已经在使用PyTorch,你应该使用他们的cosessimilarity实现。
假设有两个n维的numpy。ndarray, v1和v2,即它们的形状都是(n,)。以下是如何获得它们的余弦相似度:
import torch
import torch.nn as nn
cos = nn.CosineSimilarity()
cos(torch.tensor([v1]), torch.tensor([v2])).item()
或者假设有两个numpy。ndarray w1和w2,它们的形状都是(m, n)。下面给你一个余弦相似度列表,每个都是w1中的一行和w2中的相应行之间的余弦相似度:
cos(torch.tensor(w1), torch.tensor(w2)).tolist()
不使用任何导入
math.sqrt (x)
可以用
x * * 5
如果不使用numpy.dot(),您必须使用列表理解创建自己的dot函数:
def dot(A,B):
return (sum(a*b for a,b in zip(A,B)))
然后它只是一个应用余弦相似度公式的简单问题:
def cosine_similarity(a,b):
return dot(a,b) / ( (dot(a,a) **.5) * (dot(b,b) ** .5) )