python - 全局比对序列
问题描述
我正在对 DNA 序列进行全局比对。我已经使用预定义的规则准备了一个全局对齐矩阵“C”。
假设 Seq1 = [1,1,4,4,1] 和 Seq3 = [1,1,4,1]。
路径全局对齐的图像。如果 Seq 1 和 2 的元素匹配,则通过在对角线上添加 2,如果不匹配,则减去 1。
因此,可能的对齐输出将是 s1 = AACCA 和 s2 = A-ACA,这不是打印。从字典引用的值未包含在 s1 和 s2 中。如果我输入控制台,s1 = dict[Seq1[4]] + s1
我可以在 s1 中添加字符“C”。但是,在将其放入 while 循环后,它不会被添加到 s1 或 s2 中。
# Global Alignment
import numpy as np
Set = [1,2,3,4]
#defining DNA characters as 1,2,3,4
dict = {1:'A', 2:'T', 3:'G', 4:'C'}
Seq1 = [1,1,4,4,1]
Seq3 = [1,1,4,1]
#Assigning values to Mismatch, Gap and Match
Mismatch = -1
Match = 2
Gap = -1
#Global Alignment Matrix
m = len(Seq1)
n = len(Seq3)
C = np.array([[0 for j in range(n+1)] for i in range (m+1)]) # Creating a zero matrix
for i in range(0,m+1):
C[i][0] = i * Gap
for i in range(0,n+1):
C[0][i] = i * Gap
for i in range(0,m):
for j in range(0,n):
if Seq1[i] == Seq3[j]:
C[i+1][j+1] = C[i][j] + Match
else:
C[i+1][j+1] = max(C[i][j] + Mismatch, C[i+1][j] + Gap, C[i][j+1] + Gap)
# From here values are not getting included in s1 and s2 after being referenced from dictionary
s1 = ""
s2 = ""
i = len(Seq1)
j = len(Seq3)
while (not(i != -1 or j != -1)):
if (C[i][j] == C[i-1][j-1] + Match):
s1 = dict[Seq1[i-1]] + s1
s2 = dict[Seq3[j-1]] + s2
i=i-1
j=j-1
elif (C[i][j] == C[i-1][j-1] + Mismatch):
s1 = dict[Seq1[i-1]] + s1
s2 = dict[Seq2[j-1]] + s2
i=i-1
j=j-1
elif (C[i][j] == C[i][j-1] + Gap):
s1 = dict[Seq1[i-1]] + s1
s2 = '-' + s2
i=i-1
elif (C[i][j] == C[i-1][j] + Gap):
s1 = '-' + s1
s2 = dict[Seq3[j-1]] + s2
j=j-1
解决方案
推荐阅读
- c - 在 P2P 网络架构中避免同时进行双向连接
- c# - 对象内对象上的实体框架 LINQ 表达式
- visual-studio-code - vs代码:是否可以修复编辑器窗口的大小
- javascript - HTML 输入日期被“错误地”回读
- laravel - Laravel:如何防止发送排队的邮件?
- ab-initio - Abinitio : 将数据写入目标表
- google-apps-script - 如何用 Google Apps 脚本操作 Google Data Studio 界面,有这种可能吗?
- ios - 使用 usersdefault 快速保存持久数据的排行榜
- pandas - 在 Dataframe 中查找 BernoulliNB 概率
- jmx - 如何在tomcat中为prometheus配置jmx导出器