2017-05-14 30 views
0


我有數字數據的兩個序列讓我們說:
S1:1,6,4,9,8,7,5和S2:6,9,7,5
我想在左右和左右兩個方向上找到序列比對。
所以我使用2技術之前問我實際上使用匈牙利算法,但它不是順序,所以它不會給出好結果
而且我使用Needleman-Wunsch算法的修改版本,但我認爲我可能做錯了或者一些東西,我一直在挖掘至少4個月的任何東西,可以幫助我,但我只找到遺傳算法,這可能是有益的,但我想知道是否有算法存在,我可能還沒有看到呢?
因此,正式提出我的問題:你將如何對齊兩個積極數值(整數或雙)序列? 算法來比對數字序列

+0

你的問題中顯示的2個序列的預期輸出是什麼?你如何得到這個輸出的解釋是什麼? – Dukeling

+0

難道你不應該試着弄清楚迄今爲止你寫的代碼出了什麼問題(通過調試),而不是廢棄它並尋求不同的方法? – Dukeling

+0

@Dukeling讓我們假設這將是一個數組,我們將擁有匹配最好的元素(不是真正的完美匹配),但至少是最接近的元素,所以這個例子是隨機的,它會給出一個完美的匹配,如([ 2,1],[4,2],[6,3],[7,4]),左邊的元素是S1序列的索引,與右邊的元素相匹配,這兩個序列之間的距離實際上是非匹配元素的總和+匹配元素的絕對基數之和 – Chekbo

回答

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對準允許您使用自定義詞典(在這種情況下,我創建了一個包含數字從1-9詞典並找到它們在配對時的差異的絕對值)。如果你只是想要一個平坦的yes/no評分系統,你可以做一些像globalms這樣的事情,其中​​成功是+5,失敗是-5。請注意,我建議在執行對齊時使用空位罰分。還要熟悉'全球'和'本地'路線。關於Pairwise2 biopython模塊的更多信息可以在這裏找到:http://biopython.org/DIST/docs/api/Bio.pairwise2-module.html

+0

謝謝您的回答,但我實際上是在尋找一個對齊方式,即使數字不同,因爲該序列實際上是一個浮點序列,但我想要一個更全局的解決方案,而且我實際上找到了它只是忘了分享它,所以我使用[Wunsch Needleman算法](https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm),它適應了我的具體問題,並且實際上比較了我剛纔的數據自然而然地用絕對值和最大(seq)+ 1的差距,我不知道爲什麼+1這只是對我而言,我必須進一步搜索如何改善它。 – Chekbo