Python编写Sørensen-Dice系数计算函数报错求解
报错原因
你的代码错误本质是混淆了集合对象和集合的元素计数两个概念,公式里的|X|符号代表集合的元素个数,不是集合本身:
_a.intersection(_b)的返回值是交集集合(你的测试用例里结果是{3, 4},属于set类型),直接拿整数2和集合做乘法,自然会触发你看到的类型错误。- Python原生集合不支持
+运算符,就算修了前面的乘法问题,后面写_a + _b也会抛出类型错误,这部分同样需要取集合长度再做加法。
修正方案
用Python内置的len()函数获取集合的元素个数,再代入公式计算即可,修正后的可运行代码如下:
a = {1, 2, 3, 4} b = {3, 4, 5, 6} def dice(a, b): _a = set(a) _b = set(b) # 分别计算交集大小、两个集合的自身大小 intersection_len = len(_a.intersection(_b)) total_len = len(_a) + len(_b) return 2 * intersection_len / total_len # 调用测试,输出结果为0.5 print(dice(a, b))
针对你给出的测试用例,两个集合交集有2个元素,两个集合各有4个元素,代入公式计算结果为(2*2)/(4+4) = 0.5,符合Sørensen-Dice系数的计算预期。
内容的提问来源于stack exchange,提问作者Paul347
相关产品推荐
相关产品推荐

