首页 > 解决方案 > 两个数值范围之间的重叠分数

问题描述

我想计算两个数值范围的重叠部分。让我用一个例子来说明我的问题,因为我相信它会更容易理解。

假设我有两个数字范围:

A = [1,100]
B = [25,100]

我想知道(和代码)是 B 与 A 重叠多少,反之亦然(A 与 B 重叠多少)

在这种情况下,A与B(作为 B 的一部分)重叠 100%,BA (作为 A 的一部分)重叠75%。

我一直在尝试在 python 中对此进行编码,但我很挣扎,我找不到计算这两个分数的正确解决方案

到目前为止,我能够实现的目标如下:

鉴于两个数字范围的开始和结束,我已经能够弄清楚这两个数字范围是否重叠(来自其他 stackoverflow 帖子

我已经用下面的代码做到了这一点

def is_overlapping(x1,x2,y1,y2):
    return max(x1,y1) <= min(x2,y2)

谢谢!

标签: python

解决方案


一种(效率较低的)方法是使用集合。如果您设置范围

A = range(1,101)
B = range(25, 101)

然后你可以找到你的分数如下:

len(set(A)&set(B))/float(len(set(B)))

len(set(A)&set(B))/float(len(set(A)))

给出 1.0 和 0.76。B 中有 76 个点也在 A 中(因为您的范围似乎包含在内)。

正如其他答案所示,有更有效的方法可以使用一些数学来做到这一点,但这是通用的。


推荐阅读