我想在python中用基本函式撰寫史密斯-沃特曼演算法的第一部分。
我找到了這個
任何幫助請謝謝
uj5u.com熱心網友回復:
影像演算法實作:
M = []
for i in range(n):
M.append([])
for j in range(m):
first = max(M[i - 1][j - 1] score(s[i], t[j])
second = M[i - 1][j] penal
third = M[i][j - 1] penal
M[i].append(first, second, third, 0))
但是您必須修復邊緣情況(超出范圍)并添加一些默認值。
uj5u.com熱心網友回復:
您提供的代碼的問題在該段代碼的注釋中得到了很好的描述。
假設您想要 2 分的線性間隙懲罰,并且您只是在尋找第一階段演算法(因此不包括回溯程序),代碼可以修復如下:
def score(x, y):
return 4 if x == y else (
-4 if '-' in (x, y) else -2
)
def zeros(a, b):
penalty = 2 # linear penalty (see Wikipedia)
nextrow = [0] * (len(b) 1)
matrix = [nextrow]
for valA in a:
row, nextrow = nextrow, [0]
for m, valB in enumerate(b):
nextrow.append(max(
row[m] score(valA, valB),
row[m 1] - penalty,
nextrow[m] - penalty,
0
))
matrix.append(nextrow)
return matrix
# Example run:
result = zeros("ACGT", "AC-GT")
print(result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/318468.html
上一篇:我如何在console.log中只記錄最高評級和最高評級的電影標題
下一篇:帶有if陳述句的流水線函式
