生信算法3 - 基于k-mer算法获取序列比对索引
2023-12-15 11:43:58
生信DNA检测算法
建议在Jupyter实践,python版本3.9
基于k-mer算法获取序列比对索引的python实现
class Index(object):
def __init__(self, t, k):
''' Create index from all substrings of size 'length' '''
# k-mer长度 (k)
self.k = k
self.index = []
# 遍历每个k-mer
for i in range(len(t) - k + 1):
# add (k-mer, offset) pair
self.index.append((t[i:i+k], i))
# 按k-mer字母顺序排列
self.index.sort()
def query(self, p):
''' Return index hits for first k-mer of P '''
# query with first k-mer
kmer = p[:self.k]
# binary search
i = bisect.bisect_left(self.index, (kmer, -1))
hits = []
# collect matching index entries
while i < len(self.index):
if self.index[i][0] != kmer:
break
hits.append(self.index[i][1])
i += 1
return hits
def queryIndex(p, t, index):
k = index.k
offsets = []
for i in index.query(p):
# 验证剩余部分是否匹配
if p[k:] == t[i+k:i+len(p)]:
offsets.append(i)
return offsets
输出结果
# 测试1
test_seq = 'ACTTGGAGATCTTTGAGGCTAGGTATTCGGGATCGAAGCTCATTTCGGGGATCGATTACGATATGGTGGGTATTCGGGA'
pattern_seq = 'GGTATTCGGGA'
index = Index(test_seq, 4)
print(queryIndex(pattern_seq, test_seq, index))
# 相同序列共匹配到2个位置,[21, 68]
# 测试2
test_seq = 'ACTTGGAGATCTTTGAGGCTAGGTATTCGGGATCGAAGCTCATTTCGGGGATCGATTACGATATGGTGGGTATTCGGGA'
pattern_seq = 'ACTTG'
index = Index(test_seq, 4)
print(queryIndex(pattern_seq, test_seq, index))
# 未匹配到相同序列,[0]
生信算法文章
文章来源:https://blog.csdn.net/LittleComputerRobot/article/details/134974276
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!