美文网首页菜鸟也来学生信
使用二分查找进行bed区域过滤

使用二分查找进行bed区域过滤

作者: real3721 | 来源:发表于2022-08-02 17:07 被阅读0次

一、背景

  • 有的时候,我们需要手动对结果文件(可能是vcf,xls,或者其他形式)进行bed文件的过滤,这时候如何高效准确的对posi是否在目标区域内,成为关键。

二、关键点

① bed是0-based,vcf等格式是1-based,注意转换时,start+1,end不变

def get_bed_dic(input_bed):
'''将不同染色体的region信息存为列表,整体存为字典'''
    with open(input_bed) as ff:
        dic={}
        for line in ff:
            tmps=line.strip().split("\t")
            if tmps[0] not in dic:
                dic[tmps[0]]=[]
            dic[tmps[0]].append([int(tmps[1])+1,int(tmps[2])])
    return dic

② 大家一定不要想着用循环遍历,太慢了。建议用二分查找判断目标位置是否在target region里,速度奥奥快,嗖嗖的。

def binary_search(target,bed_list):
    '''用二分查找的方法,看看目标位置是不是落于bed区域里'''
    target=int(target)
    first=0
    last=len(bed_list)-1
    while first<=last:
        mid = (first + last)//2
        if target>=int(bed_list[mid][0]) and target<=int(bed_list[mid][1]):
            return True
        elif target < int(bed_list[mid][0]):
            last = mid-1
        else:
            first= mid+1
    return False

如果大家对原理感兴趣,给我留言吧,博主太懒了,就先不写原理了,代码见上啊。

相关文章

  • 使用二分查找进行bed区域过滤

    一、背景 有的时候,我们需要手动对结果文件(可能是vcf,xls,或者其他形式)进行bed文件的过滤,这时候如何高...

  • 兄弟连Go语言培训分享sort包sort.search()使用教

    search使用二分法进行查找,Search()方法回使用“二分查找”算法来搜索某指定切片[0:n],并返回能够使...

  • 可查找重复元素的二分查找算法

    可查找重复元素的二分查找算法 二分查找算法思想:又称为 折半查找,二分查找适合对已经排序好的数据集合进行查找。假设...

  • 查找算法——二分查找

    二分查找,也称折半查找目的:提高查找速度(当查找性能成为问题时,考虑使用二分查找) 使用前提:(较为严格)已经排好...

  • Fibonacci查找

    Fibonacci查找跟二分查找一样都是使用分治思想,其实都是每次查找的时候都是分两部分查找,二分查找使用的方式是...

  • 二分和三分

    在实际应用中,二分法查找常用于寻找单调函数: 这时需要用三分查找找到函数的最值,然后使用二分法在单调区域中找到目标...

  • [老实李] 算法初探:二分查找法 Binary Search

    二分查找法主要用来解决查找的问题 1、二分查找法Binary Search (注)对于有序数列才能使用二分查找法。...

  • 查找算法之-二分查找

    查找是针对已排序数进行查找的。1、二分查找非递归实现思想:通过while循环不断在新的区间中二分查找 2、二分查找...

  • Vue学习:过滤器、焦点、键盘修饰符/自定义键盘修饰符

    过滤器的基本使用 私有过滤器 filters私有局部过滤器,只能在 当前 VM 对象所控制的 View 区域进行使...

  • golang实现二分查找

    一组数据要进行二分查找,那么这个要查找的元素是有序,并且是连续存放(数组)。这样才可以进行二分查找。

网友评论

    本文标题:使用二分查找进行bed区域过滤

    本文链接:https://www.haomeiwen.com/subject/wtqewrtx.html