找出pytorch中两个长度不同的向量之间的Jaccard相似性



我有两个长度不等的张量(整数的1D数组),我想在PyTorch中计算它们之间的纸牌相似度。

这是纯python代码的样子

def js(list1, list2):
intersection = len(list(set(list1).intersection(list2)))
union = (len(set(list1)) + len(set(list2))) - intersection
return float(intersection) / union

这就是pytorch版本的样子(只对相同长度的数组有效)

def js_pt(list1, list2):
intersection = (list1 * list2).abs().sum(dim=-1)
sum_ = torch.sum(list1.abs() + list2.abs(), dim=-1)
jac = (intersection) / (sum_ - intersection)
return (1 - jac)

我想计算长度不等的张量之间的jaccard相似性

我可以用下面的方法计算相似度。

la1 = torch.tensor([1,2,3,4,5])
la2 = torch.tensor([4,5,6,7])
def js(l1, la2):
combined = torch.cat((la1, la2))
union, counts = combined.unique(return_counts=True)
intersection = union[counts > 1]
return torch.numel(intersection) / torch.numel(union)
js(la1, la2)
>>> 0.2857142857142857

这也适用于不等大小张量

最新更新