如何解决从更大的给定边界创建一组连续的非重叠边界
如果给定边界为 (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 举报,一经查实,本站将立刻删除。