给我这两个列表:
a = ['a','b','c','a','a']
b = ['a','b','d']我需要计算Jaccard distance = (union- intersect )/union,但是我知道每个列表中都会有重复项,我想对它们进行计数,因此本例中的intersect lenght将为2,Jaccard = (8-2)/8
我该怎么做呢?第一个想法是联合列表,然后一个接一个地删除元素。
更新:可能我不得不更多地强调我需要计算重复项;
以下是我的工作解决方案,但它相当难看:
a = [1,2,3,1,1]
b = [2,1,1, 6,5]
import collections
aX = collections.Counter(a)
bX = collections.Counter(b)
r1 = [x for x in aX if x in bX]
print r1
print sum((min(aX[x], bX[x]) for x in r1))
>>> 3发布于 2015-09-24 23:10:24
a = ['a','b','c','a','a']
b = ['a','b','d']
c = list(set(b).intersection(a))
['a','b']备注集将丢弃重复项!
发布于 2015-09-24 23:10:32
要获取两个列表a和b之间的jaccard index,请执行以下操作:
def jaccard_distance(a,b):
a = set(a)
b = set(b)
c = a.intersection(b)
return float(len(a) + len(b) - len(c)) /(len(a) + len(b))发布于 2015-09-24 23:17:34
以下是我的工作解决方案,但它相当难看:
a = [1,2,3,1,1]
b = [2,1,1, 6,5]
import collections
aX = collections.Counter(a)
bX = collections.Counter(b)
r1 = [x for x in aX if x in bX]
print r1
print sum((min(aX[x], bX[x]) for x in r1))
>>> 3https://stackoverflow.com/questions/32764671
复制相似问题