DNA序列局部比对(Smith–Waterman algorithm)
生物信息原理作业第三弹:DNA序列局部比对,利用Smith–Waterman算法,python3.6代码实现。
实例以及原理均来自https://en.wikipedia.org/wiki/Smith%E2%80%93Waterman_algorithm。
转载请保留出处!
import numpy as np
import pandas as pd
sequence1 = 'TGTTACGG'
sequence2 = 'GGTTGACTA'
s1 = ''
s2 = ''
gap = -2
score_matrix = pd.read_excel('score.xlsx') #匹配得分
print(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 def get_matrix_max(matrix): #得到最大分数下标
Max = matrix.max()
for i in range(len(sequence2)+1):
for j in range(len(sequence1)+1):
if matrix[i][j] == Max:
return (i,j) for i in range(len(sequence2)+1):
for j in range(len(sequence1)+1):
if i == 0 or j == 0:
best_matrix[i][j] = 0
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
score = max(gap1_score,gap2_score,match_score)
if score>0:
best_matrix[i][j] = score
else:
best_matrix[i][j] = 0
print(best_matrix) #traceback
i,j = get_matrix_max(best_matrix)
while(best_matrix[i][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])
感觉我的得分矩阵写成Excel不必要,等我熟悉一下Numpy和Python命令行之后会修改的。
DNA序列局部比对(Smith–Waterman algorithm)的更多相关文章
- [Sequence Alignment Methods] Smith–Waterman algorithm
Smith–Waterman algorithm 首先需要澄清一个事实,Smith–Waterman algorithm是求两个序列的最佳subsequence匹配,与之对应的算法但是求两个序列整体匹 ...
- HDU 1560 DNA sequence(DNA序列)
HDU 1560 DNA sequence(DNA序列) Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- 题解【loj537】「LibreOJ NOIP Round #1」DNA 序列
题目描述 \(NOIP\)复赛之前\(HSD\)桑进行了一项研究,发现人某条染色体上的一段\(DNA\)序列中连续的\(k\)个碱基组成的碱基序列与做题的 \(AC\) 率有关!于是他想研究一下这种关 ...
- [LeetCode] Repeated DNA Sequences 求重复的DNA序列
All DNA is composed of a series of nucleotides abbreviated as A, C, G, and T, for example: "ACG ...
- 利用Python【Orange】结合DNA序列进行人种预测
http://blog.csdn.net/jj12345jj198999/article/details/8951120 coursera上 web intelligence and big data ...
- 华为OJ平台——DNA序列
题目描述: 一个DNA序列由A/C/G/T四个字母的排列组合组成.G和C的比例(定义为GC-Ratio)是序列中G和C两个字母的总的出现次数除以总的字母数目(也就是序列长度).在基因工程中,这个比例非 ...
- 环状DNA序列
大意: 一个DNA序列是环状的,这意味着有N个碱基的序列有N种表示方法(假设无重复).而这N个序列有一种最小的表示,这个最小表示的意思是这个序列的字典序最小(字典序的意思是在字典中的大小 比如ABC& ...
- DNA序列对齐问题
问题描述: 该问题在算法导论中引申自求解两个DNA序列相似度的问题. 可以从很多角度定义两个DNA序列的相似度,其中有一种定义方法就是通过序列对齐的方式来定义其相似度. 给定两个DNA序列A和B,对齐 ...
- 简单DNA序列组装(非循环子图)
生物信息学原理作业第四弹:DNA序列组装(非循环子图) 原理:生物信息学(孙啸) 大致思想: 1. 这个算法理解细节理解比较困难,建议看孙啸的生物信息学相关章节. 2. 算法要求所有序列覆盖整个目标D ...
随机推荐
- 前端自动化-----gulp详细入门(转)
简介: gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器:她不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成:使用她,我们不仅可以很愉快的编写代码 ...
- Mybatis中是否需要依赖配置文件的名称要和mapper接口的名称一致 params错误
一:当核心配置文件mapper标签下以resource形式指向依赖配置文件时,不需要 这样就可以加载到其相应的依赖配置文件通过namespace找到其相应的方法 二:如果mapper标签下以packa ...
- PHP实现伪静态方法汇总
PHP伪静态的使用主要是为了隐藏传递的参数名,下面给大家介绍php实现伪静态的方法,对php实现伪静态相关知识感兴趣的朋友一起学习吧 PHP伪静态的使用主要是为了隐藏传递的参数名,下面给大家介绍php ...
- ngRx 官方示例分析 - 1. 介绍
ngRx 的官方示例演示了在具体的场景中,如何使用 ngRx 管理应用的状态. 示例介绍 示例允许用户通过查询 google 的 book API 来查询图书,并保存自己的精选书籍列表. 菜单有两 ...
- vue源码入口文件分析
开发vue项目有段时间了, 之前用angularjs 后来用 reactjs 但是那时候一直没有时间把自己看源码的思考记录下来,现在我不想再浪费这 来之不易的思考, 我要坚持!! 看源码我个人感觉非常 ...
- whoops php调试库
Whoops 适用于PHP环境的错误捕获与调试PHP库: whoops非常容易使用,它提供stackbased错误捕获及超美观的错误查看 测试效果如下 安装步骤(composer安装) 安装完成之后在 ...
- linux常用命令_1
linux中命令格式是什么? 命令 [参数选项] [文件或路径] 中括号表示可选,命令的参数与路径文件可选 参数选择表示一个命令的不同功能 命令 和 参数选项 中必有一空格,多个参数连在一起写 几乎所 ...
- 解决跨站脚本注入,跨站伪造用户请求,sql注入等http安全漏洞
跨站脚本就是在url上带上恶意的js关键字然后脚本注入了,跨站伪造用户请求就是没有经过登陆,用超链接或者直接url上敲地址进入系统,类似于sql注入这些都是安全漏洞. sql注入 1.参数化查询预处理 ...
- PHP 运行 php-fpm 报错
报错如下: [27-Aug-2017 18:34:23] WARNING: Nothing matches the include pattern '/usr/local/php/etc/php- ...
- 在 ios 中的日期格式
var d="2017-1-1" ; new Date(d) //生成一个日期对象 这样写在 Android 中没有问题,但是在 ios 中,d 的格式不对,应该设为 2017- ...