python - 两个数值范围之间的重叠分数
问题描述
我想计算两个数值范围的重叠部分。让我用一个例子来说明我的问题,因为我相信它会更容易理解。
假设我有两个数字范围:
A = [1,100]
B = [25,100]
我想知道(和代码)是 B 与 A 重叠多少,反之亦然(A 与 B 重叠多少)
在这种情况下,A与B(作为 B 的一部分)重叠 100%,B与A (作为 A 的一部分)重叠75%。
我一直在尝试在 python 中对此进行编码,但我很挣扎,我找不到计算这两个分数的正确解决方案
到目前为止,我能够实现的目标如下:
鉴于两个数字范围的开始和结束,我已经能够弄清楚这两个数字范围是否重叠(来自其他 stackoverflow 帖子)
我已经用下面的代码做到了这一点
def is_overlapping(x1,x2,y1,y2):
return max(x1,y1) <= min(x2,y2)
谢谢!
解决方案
一种(效率较低的)方法是使用集合。如果您设置范围
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 中(因为您的范围似乎包含在内)。
正如其他答案所示,有更有效的方法可以使用一些数学来做到这一点,但这是通用的。
推荐阅读
- php - 填写表格时收到访客信息的电子邮件
- java - 我在华为 AppGallery 上发布我的应用后,Admob 广告没有显示
- javascript - 如何从返回语句中检索谷歌驱动文件的绝对链接?
- c++ - 在 C++ 中使用 {} 声明变量时出错
- javascript - 如何在 POST 请求后正确呈现新元素?
- rust - 使用 rust 从网站上抓取由混淆的 JS 代码生成的数据
- java - 为什么 ResponseBody 和 Jackson ObjectMapper 不返回相同的输出?
- c# - 使用 C# 更新 SQL 表
- kernel - 内核是否跟踪进程在内存中的启动位置或 CPU?
- amazon-web-services - 非法指令(核心转储)docker、red hat 7.7、aws ec2