对齐数字序列的算法

时间:2017-05-14 22:31:41

标签: algorithm sequence-alignment

您好
我有两个数字数据序列,让我们说:
S1:1,6,4,9,8,7,5和S2:6,9,7,5
并且我想在左右和右左两个意义上找到序列比对 因此我在问我实际使用匈牙利算法之前使用了2种技术,但它没有顺序,所以它没有给出好的结果
我使用了Needleman-Wunsch算法的修改版但我认为我可能做错了什么,而且我已经挖了至少4个月的任何可以帮助我的东西,但我只找到了可能有帮助的遗传算法,但我想知道是否有' sa存在的我可能尚未见过的算法?
所以要正式化我的问题:你如何对齐两个数字(整数或双数)序列?

1 个答案:

答案 0 :(得分:0)

我相信你可以通过以下方式实现你的目标:

import string
from Bio import pairwise2
from Bio.pairwise2 import format_alignment

seq1 = "1649875"
seq2 = "6975"

numDict = {}
for x in range(0,10):
    for y in range(0,10):
        numDict[(str(x),str(y))] = -abs(x-y)
#print(numDict)

for a in pairwise2.align.globalds(seq1, seq2, numDict, -3, -1):
    print(format_alignment(*a)) #prints alignment with best score

#for a in pairwise2.align.globalms(seq1, seq2, 5, -5, -3, -1):
    print(format_alignment(*a))

globalds alignment允许你使用自定义词典(在这种情况下,我创建了一个包含1-9之间数字的字典,并在配对时找到它们差异的绝对值)。如果你只想要一个平坦的是/否评分系统,你可以做类似globalms的事情,其中​​成功是+5而失败是-5。注意,我建议在执行对齐时使用间隙惩罚。还要熟悉“全局”和“本地”路线。有关Pairwise2 biopython模块的更多信息,请访问:http://biopython.org/DIST/docs/api/Bio.pairwise2-module.html