python实现动态规划全局比对

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")

声明:写得不好,别喷

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值