生物信息学原理作业第二弹:利用Needleman–Wunsch算法进行DNA序列全局比对。

具体原理:https://en.wikipedia.org/wiki/Needleman%E2%80%93Wunsch_algorithm。

利用Needleman–Wunsch算法进行DNA序列全局比对

转载请保留出处!

贴上python代码:

 # -*- coding: utf-8 -*-
"""
Created on Sat Nov 25 18:20:01 2017 @author: zxzhu
后需修改:
1.加命令行参数
2.给出多种比对结果
""" import numpy as np
import pandas as pd
sequence1 = 'AACGTACTCA'
sequence2 = 'TCGTACTCA'
s1 = ''
s2 = ''
gap = -4
score_matrix = pd.read_excel('score.xlsx') #score matrix
best_matrix = np.empty(shape= (len(sequence2)+1,len(sequence1)+1),dtype = int) def get_match_score(s1,s2):
score = score_matrix[s1][s2]
return score for i in range(len(sequence2)+1):
for j in range(len(sequence1)+1):
if i == 0:
best_matrix[i][j] = gap * j elif j == 0:
best_matrix[i][j] = gap *i
else:
match = get_match_score(sequence2[i-1],sequence1[j-1])
gap1_score = best_matrix[i-1][j]+gap
gap2_score = best_matrix[i][j-1]+gap
match_score = best_matrix[i-1][j-1]+match
best_matrix[i][j] = max(gap1_score,gap2_score,match_score)
print(best_matrix)
i,j = len(sequence2),len(sequence1)
while(i>0 or j>0):
match = get_match_score(sequence2[i-1],sequence1[j-1])
if i>0 and j>0 and best_matrix[i][j] == best_matrix[i-1][j-1]+match:
s1 += sequence1[j-1]
s2 += sequence2[i-1]
i-=1;j-=1
elif i>0 and best_matrix[i,j] == best_matrix[i-1,j]+gap:
s1+='-'
s2+=sequence2[i-1]
i-=1
else:
s1+=sequence1[j-1]
s2+='-'
j-=1
print(s1[::-1]+'\n'+s2[::-1])

后面会加入命令行。

多种结果这里只取了一种,这个问题有待解决。

如果有其他的方法我会及时添加。

利用Needleman–Wunsch算法进行DNA序列全局比对的更多相关文章

  1. 文本比较算法:Needleman/Wunsch算法

    本文介绍基于最长公共子序列的文本比较算法——Needleman/Wunsch算法.还是以实例说明:字符串A=kitten,字符串B=sitting那他们的最长公共子序列为ittn(注:最长公共子序列不 ...

  2. 字符串与模式匹配算法(六):Needleman–Wunsch算法

    一.Needleman-Wunsch 算法 尼德曼-翁施算法(英语:Needleman-Wunsch Algorithm)是基于生物信息学的知识来匹配蛋白序列或者DNA序列的算法.这是将动态算法应用于 ...

  3. 文本比较算法Ⅱ——Needleman/Wunsch算法

    在"文本比较算法Ⅰ--LD算法"中介绍了基于编辑距离的文本比较算法--LD算法. 本文介绍基于最长公共子串的文本比较算法--Needleman/Wunsch算法. 还是以实例说明: ...

  4. 文本比较算法Ⅱ——Needleman/Wunsch算法的C++实现【求最长公共子串(不需要连续)】

    算法见:http://www.cnblogs.com/grenet/archive/2010/06/03/1750454.html 求最长公共子串(不需要连续) #include <stdio. ...

  5. 牛客算法:DNA序列

    import java.util.*; public class Main{ public static void main(String[] args){ try(Scanner in = new ...

  6. DNA序列组装(贪婪算法)

    生物信息学原理作业第四弹:DNA序列组装(贪婪算法) 原理:生物信息学(孙啸) 大致思想: 1. 找到权值最大的边: 2. 除去以最大权值边的起始顶点为起始顶点的边: 3. 除去以最大权值边为终点为终 ...

  7. 利用Python【Orange】结合DNA序列进行人种预测

    http://blog.csdn.net/jj12345jj198999/article/details/8951120 coursera上 web intelligence and big data ...

  8. [LeetCode] Repeated DNA Sequences 求重复的DNA序列

    All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...

  9. 简单DNA序列组装(非循环子图)

    生物信息学原理作业第四弹:DNA序列组装(非循环子图) 原理:生物信息学(孙啸) 大致思想: 1. 这个算法理解细节理解比较困难,建议看孙啸的生物信息学相关章节. 2. 算法要求所有序列覆盖整个目标D ...

随机推荐

  1. Logger之Logger.getLogger(CLass)技巧代替system.out.print

    ---恢复内容开始--- 尊重原创:http://www.cnblogs.com/zxf330301/p/5876117.html 之前一直在使用System.out.println()来调试.但是用 ...

  2. linux 下CentOS 下 npm命令安装gitbook失败的问题

    运行环境 linux 服务器:CentOS 7.0 系统:安装了nodejs :使用 npm 安装 gitbook 出现错误提示: npm install -g gitbook-cli symbol ...

  3. [数据预处理]-中心化 缩放 KNN(一)

    据预处理是总称,涵盖了数据分析师使用它将数据转处理成想要的数据的一系列操作.例如,对某个网站进行分析的时候,可能会去掉 html 标签,空格,缩进以及提取相关关键字.分析空间数据的时候,一般会把带单位 ...

  4. java中类的加载过程和对象的创建过程

    1.类加载过程 首先,jvm在执行时,遇到一个新的类,会先去内存的方法区中去寻找该类的.class文件,如果找到了就直接运行,如果没有找到,则会去硬盘中去寻找该类的.class文件,并将该类文件加载到 ...

  5. mybatis_SQL映射(3)

    文章摘录自:http://blog.csdn.net/y172158950/article/details/17304645 1. 表关联 a) 嵌套查询(传说中的1+N问题) <resultM ...

  6. 批处理注册dll时候 遇到错误:模块已加载,但对***dll的调用失败

    解决方法 在批处理的第一行加入:cd /d %~dp0 然后在批处理上右键选择使用管理员权限运行

  7. vue初学者

    先分享一波福利 vue学习视频    链接:https://pan.baidu.com/s/1ggSfE75 密码:7h2a        1.先安装 webpack vue-cli          ...

  8. 译-what is cmdlet

    A cmdlet (pronounced "command-let") is a lightweight Windows PowerShell script that perfor ...

  9. j2e应用相关技术

    j2e应用相关技术 轻量级j2e应用以传统的jsp作为变现层技术,以一系列开源框架作为MVC层,中间件,持久层解决方案,并将这些开源框架有机组合在一起,使得j2e具有高度的可扩展性,可维护性. ser ...

  10. JAVA中获取文件MD5值的四种方法

    JAVA中获取文件MD5值的四种方法其实都很类似,因为核心都是通过JAVA自带的MessageDigest类来实现.获取文件MD5值主要分为三个步骤,第一步获取文件的byte信息,第二步通过Messa ...