python实现动态规划全局比对
程序员文章站
2022-03-11 10:12:52
python实现动态规划全局比对代码代码import numpy as npdef m_n_ne_0(m,n): num=matrix[m][n]-matrix[m-1][n-1] if (num==match and seq_A[n-1] == seq_B[m-1]) or (num ==mis_match and seq_A[n-1] != seq_B[m-1]): matched_A.insert(0,seq_A[n-1]) matched_B....
python实现动态规划全局比对
代码
import numpy as np
def huisu(m,n):
num=matrix[m][n]-matrix[m-1][n-1]
if (num==match and seq_A[n-1] == seq_B[m-1]) or (num ==mis_match and seq_A[n-1] != seq_B[m-1]):
matched_A.insert(0,seq_A[n-1])
matched_B.insert(0,seq_B[n-1])
m-=1
n-=1
elif (matrix[m][n]-matrix[m][n-1]) == gap_symbol or m==0:
matched_A.insert(0,seq_A[n-1])
matched_B.insert(0,'-')
n-=1
else :
matched_A.insert(0,'-')
matched_B.insert(0,seq_B[n-1])
m-=1
return(m,n)
seq_A=input("SequenceA:")
seq_B=input("SequenceB:")
match=int(input("Match:"))
mis_match=int(input("Mismatch:"))
gap_symbol=int(input("Gap_symbol:"))
length_A=len(seq_A)
length_B=len(seq_B)
matrix=np.zeros((length_B+1,length_A+1))
for i in range(1,length_A+1):
matrix[0][i]=matrix[0][i-1]+gap_symbol
for i in range(1,length_B+1):
matrix[i][0]=matrix[i-1][0]+gap_symbol
for m in range(1,length_B+1):
for n in range(1,length_A+1):
upd=matrix[m-1][n]+gap_symbol
leftd=matrix[m][n-1]+gap_symbol
if seq_B[m-1] == seq_A[n-1] :
upleftd=matrix[m-1][n-1]+match
else:
upleftd=matrix[m-1][n-1]+mis_match
matrix[m][n]=max(upd,leftd,upleftd)
#print(matrix)
print("\t0\t",end="")
for i in seq_A:
print(i,end="\t")
print("\n")
for m in range(0,length_B+1):
if m > 0:
print(seq_B[m-1],end="\t")
else:
print("0",end="\t")
for n in range(0,length_A+1):
print(matrix[m][n],end="\t")
print("\n")
m=length_B
n=length_A
matched_A=[]
matched_B=[]
while(m>0 or n>0):
(m,n)=huisu(m,n)
print("\n")
for i in matched_A:
print(i,end=" ")
print("\n")
for i in matched_B:
print(i,end=" ")
print("\n")
声明:写得不好,别喷
本文地址:https://blog.csdn.net/weixin_45214599/article/details/110481212
上一篇: Python基础入门学习:注释、变量、运算符与数据类型
下一篇: PyCharm双击打不开怎么办?