[英]How to calculate the percentage of overlap between 2 ranges with python
我想計算 2 個范圍之間的重疊百分比。
例如:我有兩個列表 x 和 yx ['567.630', '592.927'] y ['593.000', '618.297'] 在這種情況下我想要一個 output 的 0 因為沒有重疊。
x ['793.843', '802.244'] y ['794.843', '803.244'] 在這種情況下,我想要 87% 的 output。
x 和 y 的總范圍並不總是相同。 可能是 x 是 10s 而 y 只是 8s。
會不會有一些包可以執行這些計算?
先感謝您!
這是一個更短的解決方案,您可以在其中選擇要比較重疊的列表。 如果您希望 [0,1] 和 [0,2] 的重疊為 100%,您可以從 output 中執行 max(x,y)。我更改了 y 列表以顯示這一點。
x = [793.843, 802.244]
y = [794.843, 900.244]
def overlap_percentage(xlist,ylist):
min1 = min(xlist)
max1 = max(xlist)
min2 = min(ylist)
max2 = max(ylist)
overlap = max(0, min(max1, max2) - max(min1, min2))
length = max1-min1 + max2-min2
lengthx = max1-min1
lengthy = max2-min2
return 2*overlap/length , overlap/lengthx , overlap/lengthy
average, x,y = overlap_percentage(x,y)
print("average: ", average*100,"% x: ", x*100,"% y: ",y*100,"%")
output
average: 13.0 % x: 88.0% y: 7.0 %
不需要額外的進口。 我假設數據是float
列表而不是字符串。 該百分比計算為與第二個間隔重疊,對於另一種情況,請取消注釋實施中的行。
def overlapping_percentage(interval1: list, interval2: list) -> int:
# min max of each intervals
m1, M1 = min(interval1), max(interval1)
m2, M2 = min(interval2), max(interval2)
# find overlapping boundaries
lb, ub = 0, 0 # lower and upper bound
if m1 <= m2 <= M1:
if M1 >= M2: # i2 is contained in i1
lb, ub = m2, M2
elif M1 < M2:
lb, ub = m2, M1
elif m2 <= m1 <= M2:
if M1 <= M2: # i1 is contained in i2
lb, ub = m1, M1
elif M1 > M2:
lb, ub = m1, M2
# percentage
percent = int((ub - lb) / (interval2[1] - interval2[0]) * 100)
# percent = int((ub - lb) / (interval1[1] - interval1[0]) * 100) # for the other percentage uncomment this line
print('overlapping interval', lb, ub)
print(percent, '%')
return percent
# intervals
#i1, i2 = [567.630, 592.927], [593.000, 618.297]
i1, i2 = [793.843, 802.244], [794.843, 803.244]
overlapping_percentage(i1, i2)
# overlapping interval 794.843 - 802.244
# 88 %
重疊部分可以進一步壓縮如下
...
# find overlapping boundaries
lb, ub = 0, 0 # lower and upper bound
if m1 <= m2 <= M1:
lb, ub = m2, min(M1, M2)
elif m2 <= m1 <= M2:
lb, ub = m1, min(M1, M2)
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.