python求两个列表不一样的值_python–计算两个列表之间的相似性

更新时间:2023-06-02 04:19:47 阅读: 评论:0

python求两个列表不⼀样的值_python–计算两个列表之间的相
似性
也许使⽤
collections.Counter();这些是多套或包,⽤数据类型表⽰:
from collections import Counter
counterA = Counter(listA)
counterB = Counter(listB)
现在您可以按条⽬或频率进⾏⽐较:
>>> counterA
Counter({'apple': 3, 'orange': 2, 'banana': 1})
>>> counterB
Counter({'apple': 2, 'orange': 1, 'grapefruit': 1})
>>> counterA - counterB
Counter({'orange': 1, 'apple': 1, 'banana': 1})
>>> counterB - counterA
Counter({'grapefruit': 1})
拌芥菜疙瘩丝您可以使⽤以下⽅法计算其余弦相似度:
羊踹玉兔
支原体感染怎么引起的import math
def counter_cosine_similarity(c1, c2):
terms = t(c1).union(c2)
dotprod = (k, 0) * c2.get(k, 0) for k in terms)
magA = math.sqrt((k, 0)**2 for k in terms))
股权投资合伙企业
magB = math.sqrt((k, 0)**2 for k in terms))
return dotprod / (magA * magB)
这使:
>>> counter_cosine_similarity(counterA, counterB)
0.8728715609439696
该值越接近1,两个列表越相似.独唱情歌
余弦相似度是您可以计算的⼀个分数.如果你关⼼列表的长度,你可以计算另⼀个;如果你将得分保持在0.0和1.0之间,你可以将这两个值乘以-1.0和1.0之间的最终得分.
例如,要考虑相对长度,您可以使⽤:
def length_similarity(c1, c2):
lenc1 = sum(c1.itervalues())
lenc2 = sum(c2.itervalues())
return min(lenc1, lenc2) / float(max(lenc1, lenc2))
然后组合成⼀个以列表作为输⼊的函数:
def similarity_score(l1, l2):
c1, c2 = Counter(l1), Counter(l2)
叻沙怎么读
return length_similarity(c1, c2) * counter_cosine_similarity(c1, c2)
对于您的两个⽰例列表,结果是:
项羽和刘邦
>>> similarity_score(['apple', 'orange', 'apple', 'apple', 'banana', 'orange'], ['apple', 'orange', 'grapefruit', 'apple']) 0.5819143739626463
>>> similarity_score(['apple', 'apple', 'orange', 'orange'], ['apple', 'orange'])
艾丁格啤酒0.4999999999999999
您可以根据需要混合使⽤其他指标.

本文发布于:2023-06-02 04:19:47,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/830940.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:列表   计算   混合   长度   考虑   股权   支原体   芥菜
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图