微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从更大的给定边界创建一组连续的非重叠边界

如何解决从更大的给定边界创建一组连续的非重叠边界

如果给定边界为 (40,260) 并且需要将其划分为 4 个相等的较小的连续非重叠边界(即,(40,95)、(96,150)、(151,205)、(206,260)) 我尝试了以下方法

def range_non_overlapping(range_left,range_right,range_per_cut,cut_num)  
    ranges=[]
    for i in range(cut_num):
            ranges.append(range_left + i * range_per_cut)
            ranges.append(min(range_right,(range_left + (i + 1) * range_per_cut))) 
    return ranges

但以下代码导致边界 [40,95,150,205,260] 上的区域重叠(列表开头的对是较小的边界)。我需要创建 [40,96,151,206,260]

解决方法

如果端点是包含的,那么你不能得到 4 个相等的区域,因为大小 (221) 不是 4 的倍数。我认为你想要 (40,94)、(95,149)、(150,204) ),(205,260)),你可以这样做:

def divide( left,right,cuts ):
    delta = (right-left+1) // cuts
    out = []
    for i in range(cuts):
        out.append( left )
        left += delta
        out.append( left - 1 )
    out[-1] = right
    return out

print( divide( 40,260,4 ) )

那些区域是 55、55、55 和 56。

,
def chunknize(start,stop,num):
    step = (stop - start) / num
    return [
        (start + i * step + (0 if i == 0 else 1),start + (i + 1) * step)
        for i in range(num)]
    
print(chunknize(40,4))
# [(40.0,95.0),(96.0,150.0),(151.0,205.0),(206.0,260.0)]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。