Python中计算重叠的内置函数
有没有什么内置的函数可以计算两个离散区间之间的重叠,比如说计算[10, 15]和[20, 38]之间的重叠部分?在这种情况下,重叠部分是0。如果是[10, 20]和[15, 20],那么重叠部分就是5。
8 个回答
4
这里有一个很不错的函数,来自于Aaron Quinlan的chrom_sweep,我对它进行了修改,以适应你的区间表示。这个函数会返回两个区间重叠的碱基对(bp)数量,如果没有重叠的话,它会返回一个负数,表示它们之间的距离。
def overlaps(a, b):
"""
Return the amount of overlap, in bp
between a and b.
If >0, the number of bp of overlap
If 0, they are book-ended.
If <0, the distance in bp between them
"""
return min(a[1], b[1]) - max(a[0], b[0])
17
可以看看 pyinterval 这个库,链接在这里:http://code.google.com/p/pyinterval/
import interval
x=interval.interval[10, 15]
y=interval.interval[20, 38]
z=interval.interval[12,18]
print(x & y)
# interval()
print(x & z)
# interval([12.0, 15.0])
93
你可以使用最大值和最小值的功能:
>>> def getOverlap(a, b):
... return max(0, min(a[1], b[1]) - max(a[0], b[0]))
>>> getOverlap([10, 25], [20, 38])
5
>>> getOverlap([10, 15], [20, 38])
0