蛋白质一级结构全局比对 Needleman-Wunsch 算法的 Python 实现

【序列比对】Needleman-Wunsch(全局)和Smith-Waterman(局部)算法py实现(多条回溯路径,三叉树思路,超详细注释) 超详细注释,py实现Needleman-Wunch和Smith-Waterman算法,多条回溯路径 阅读详情

有关全局对比算法的基本思想可以看这篇文章,这里仅仅用 Python 浅浅实现一下。程序在最后。禁止转载。以下面这两个短肽为例说明一下程序的思路:

SIVK
SSIIVP

在这里我们设计了两个矩阵:matrix1为得分矩阵,用来计算和记录两序列各个配对的得分;matrix2为溯回矩阵,用于记录各配对得分的来源,以及最终对比结果的输出。

Initialize_Matrix部分初始化上面两个矩阵,初始化结果如下:

[[  0.   0.   0.   0.   0.   0.]
 [  0.   0.  -3.  -6.  -9. -12.]
 [  0.  -3.   0.   0.   0.   0.]
 [  0.  -6.   0.   0.   0.   0.]
 [  0.  -9.   0.   0.   0.   0.]
 [  0. -12.   0.   0.   0.   0.]
 [  0. -15.   0.   0.   0.   0.]
 [  0. -18.   0.   0.   0.   0.]] 
 
 [[0. 0. 0. 0. 0. 0.]
 [0. 0. 2. 2. 2. 2.]
 [0. 1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]
 [0. 1. 0. 0. 0. 0.]]

Needleman_Wunsch部分中s代表得分(score),d代表来源(direction)。这一部分需要接收对比序列seq1第j个残基和seq2第i个残基在矩阵中的位置(i,j),其匹配得分w以及其上/左/左上方的最终得分(su,sl,sul),根据这些输入及得分规则算出最终得分s和来源d。

blosum为配对分数的一个简易库(因为嫌麻烦所以只写了需要用到的,如果是核酸序列那就更简单了),并且可以查询得到配对分数。

check_d用来将matrix2来进行溯回以输出对比序列。

而历遍seq1和seq2的部分整合到了main()里面,由于matrix1索引为0的行(列)是留出来写序列的(后来发现好像numpy的matrix似乎写不进字符串),索引为1的行(列)是用来空对比的(或者说是gap对比),所以我们seq1第j个残基和seq2第i个残基 (j, i) 对应到matrix里面就成了 [i+2, j+2],(后面的说明先咕一会

import numpy as np

def Initialize_Matrix(seq1,seq2,gap):
    matrix1 = np.zeros((len(seq2)+2,len(seq1)+2))
    matrix2 = np.zeros((len(seq2)+2,len(seq1)+2))
    matrix1[1, 1:] = np.linspace(0, (len(matrix1[1, 1:]) - 1) * gap, num=len(matrix1[1, 1:]), endpoint=True)
    matrix1[1:, 1] = np.linspace(0, (len(matrix1[1:, 1]) - 1) * gap, num=len(matrix1[1:, 1]), endpoint=True)
    matrix2[1, 2:] = 2
    matrix2[2:, 1] = 1
    return matrix1,matrix2

def Needleman_Wunsch(gap,w,su,sl,sul):
    s = max(sul+w,su+gap,sl+gap)
    if sul+w == s:
        d = 3
    elif sl+gap == s:
        d = 2
    else:
        d = 1
    return [s,d]

def blosum(res1,res2):
    blosum_bank = {'AS':1,'AI':-1,'AV':0,'AP':-1,'IS':-2,'II':4,
                   'IV':3,'IP':-3,'VS':-2,'VV':4,'VP':-2,
                   'KS':0,'KI':-3,'KV':-2,'KP':-1,'SP':-1,'SS':4}
    w = blosum_bank.get(res1+res2,blosum_bank.get(res2+res1))
    return w

def check_d(matrix2,seq1,seq2):
    i = -1
    j = -1
    alain_seq1 = ''
    alain_seq2 = ''
    while i >= -(len(seq2)+1) and j >= -(len(seq1)+1):
        #print(alain_seq1)
        if matrix2[i][j] == 3:
            alain_seq1 = seq1[j] + alain_seq1
            alain_seq2 = seq2[i] + alain_seq2
            i -= 1
            j -= 1
        elif matrix2[i][j] == 1:
            alain_seq1 = '-' + alain_seq1
            alain_seq2 = seq2[i] + alain_seq2
            i -= 1
        elif matrix2[i][j] == 2:
            alain_seq1 = seq1[j] + alain_seq1
            alain_seq2 = '-' + alain_seq2
            j -= 1
        elif matrix2[i][j] == 0:
            print('done')
            break
        else:
            print('wrong')
            break
    return alain_seq1,alain_seq2


def main():
    seq1 = 'SIVK'
    seq2 = 'SSIIVP'
    gap = -3
    matrix1,matrix2 = Initialize_Matrix(seq1,seq2,gap)
    #print(matrix1,'\n',matrix2)
    for j in range(len(seq1)+len(seq2)):
        for i in range(j+1):
            if j-i <= len(seq1)-1 and i <= len(seq2)-1:
                result = Needleman_Wunsch(gap,blosum(seq1[j-i],seq2[i]),matrix1[i+1][j-i+2],
                                          matrix1[i+2][j-i+1],matrix1[i+1][j-i+1])
                matrix1[i+2][j-i+2] = result[0]
                matrix2[i+2][j-i+2] = result[1]
                #print(j-i-1,i-1,seq1[j-i-1],seq2[i-1])
                #print(matrix1)
            else:
                print('wrong')
                continue
    alain_seq1, alain_seq2 = check_d(matrix2,seq1,seq2)
    print(matrix1,'\n\n',matrix2,'\n\n',alain_seq1,'\n',alain_seq2)

main()

最终输出结果:

done

[[  0.   0.   0.   0.   0.   0.]
 [  0.   0.  -3.  -6.  -9. -12.]
 [  0.  -3.   4.   1.  -2.  -5.]
 [  0.  -6.   1.   2.  -1.  -2.]
 [  0.  -9.  -2.   5.   5.   2.]
 [  0. -12.  -5.   2.   8.   5.]
 [  0. -15.  -8.  -1.   6.   6.]
 [  0. -18. -11.  -4.   3.   5.]] 

 [[0. 0. 0. 0. 0. 0.]
 [0. 0. 2. 2. 2. 2.]
 [0. 1. 3. 2. 2. 2.]
 [0. 1. 3. 3. 3. 3.]
 [0. 1. 1. 3. 3. 2.]
 [0. 1. 1. 3. 3. 2.]
 [0. 1. 1. 1. 3. 3.]
 [0. 1. 1. 1. 1. 3.]] 

 -S-IVK 
 SSIIVP

但是这个方法还存在一些问题,就比如:如果在su,sl,sul计算得到的最总分数里存在两个相同的最大值,也就是存在多条回溯路径,那么该怎么实现多个输出呢,或者说设计一个优先级的判断……

等有兴趣再更

生物信息学:任选一种编程语言,设计一个双序列全局比对的程序 任选一种编程语言,设计一个双序列全局比对的程序。要求: 1) 输入两条蛋白质序列,输出比对结果例如: Alignment Score: 12345 E E E E E K K K K K A A A A A F F F E E E E E - - - - - B B B B B F F F 2) 使用BLOSUM62矩阵来对序列中氨基酸符号的match和mismatch打分。 3) 使用动态规划的... 阅读详情

相关推荐

python实现序列比对之Needleman-wunsch算法 (附完整源码)

python实现序列比对之Needleman-wunsch算法 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 460

生物信息【蛋白序列对比blosum】

生物信息【蛋白序列对比blosum】

weixin_63016274的博客 5090

biostructmap:用于将序列比对数据映射到蛋白质结构的Python软件包

生物结构图 Biostructmap是一个Python工具,用于将序列比对的数据(例如多态性的位置)映射到蛋白质结构上。 此外,生物结构图允许将残基的空间邻近性纳入滑动窗口计算中,并可用于将蛋白质结构信息纳入选择压力的遗传测试中。 尽管Python软件包更灵活并且可能更快,但提供基于Web的界面。 目录 入门 使用范例 计算半径内多态残基的比例 一个简单的使用案例可能是鉴定具有高百分比多态性残基的蛋白质区域。 如果我们可能对抗体-抗原相互作用感兴趣,那么15埃是一个可以平均的合理半径。 import biostructmap # Initialise structure object structure = biostructmap.Structure('1zrl.pdb', 'test_pdb_name') # The location of known polymorphi

双序列比对

本文学习自罗静初老师写的双序列比对的论文

m0_70166478的博客 3971

Needleman-Wunsch:Needleman-Wunsch算法的实现

R中的Needleman-Wunsch 这是一个R包,用于实现Needleman和Wunsch序列比对,并使用testthat单元测试框架进行了单元测试。 安装: 使用devtools : devtools::install_github("hiraethus/Needleman-Wunsch") 用法示例: > library( " hiraethus.needleman.wunsch " ) > sequence1 <- " ACCCGGTCGTCAATTA " > sequence2 <- " ACCACCGGTTGGTCCAATAA " # scoring scheme for the algorithm > match <- 1 > mismatch <- - 1 > gap <- - 1 > alignment <- needle( sequence1 , sequ

nwunch:使用嵌套函数在Python中实现Needleman-Wunsch算法

恩旺奇 使用嵌套函数在Python中实现Needleman-Wunsch算法。

用Python实现生信分析——序列搜索和比对工具详解

序列搜索和比对工具在生物信息学中用于在大型序列数据库中搜索与查询序列相似的序列,并进行比对分析。这些工具可以帮助研究人员识别与目标序列相关的已知序列,从而推测其功能、结构和进化关系。:最常用的序列搜索工具,能够快速找到与查询序列相似的序列。FASTA:另一个常用的序列搜索工具,与BLAST类似,但在算法和性能上有所不同。

qq_41698317的博客 2812

动态规划 序列对比 Needleman-Wunsch Smith-Waterman algorthm(java)

可以使用需要重新加载biojava.jar jar包代码是全的,不会可以问我。jar包在lib目录下面 输出结果: Global alignment with Needleman-Wunsch: Time (ms): 3 Length: 9 Score: 0 Query: query, Length: 9 Target: target, Length: 8 Query: 1 gccctagcg 9 || | | | Target: 1 gcgc-aatg 8 Local alignment with Smith-Waterman: Time (ms): 0 Length: 3 Score: 3 Query: query, Length: 9 Target: target, Length: 8 Query: 7 gcg 9 ||| Target: 1 gcg 3

Biopython序列比对

下载多序列比对文件Pfam-A.seed.gz(含多个多序列比对)解压,取第一个多多序列比对文件。从InterPro网站(

qq_27390023的博客 933

怎么用phpstudy制作网站

随着实践的深入,你会逐渐掌握更多高级技巧和技术,让你的网站变得更加完善和吸引人。现在你已经成功设置了你的本地Web服务器环境,接下来我们将指导你如何利用这个环境来创建一个简单的PHP网页项目。为了使网站更加动态且功能丰富,我们需要学会如何让PHP脚本与MySQL数据库交互。为了让网站看起来更专业美观,可以考虑引入CSS样式表来定制网页布局及视觉效果。当你对本地开发的网站感到满意后,下一步就是将其发布到互联网上供他人访问了。让我们进一步扩展我们的网站,加入一个简单的用户注册与登录系统。

2401_87999399的博客 6574

Ubuntu20.04安装Torque-6.1.2单机版(踩坑篇)

说明:PBS排队系统原先是在Centos7安装使用很顺利,但是有客户需求在Ubuntu20.04上使用,着手在Ubuntu20.04安装上安装的时候发现很多报错,并不能顺利安装,网上查找到的教程,有的说是让放弃转slurm,有的是换源安装,但是安装好的版本很低,有许多bug,不是很好用。经过自己慢慢摸索之后,改了部分配置以及源码之后,能够顺利安装,再次记录一下踩坑心得,与大家一起分享学习。如有问题,欢迎大家来撩。...............

华青水上的博客 8087

生物信息学实战:用Python实现Needleman-Wunsch全局序列比对(附可视化代码)

本文详细介绍了如何使用Python实现生物信息学中的Needleman-Wunsch全局序列比对算法,包括动态规划原理、计分系统设计、矩阵填充与回溯路径的实现,以及通过Matplotlib进行可视化展示。文章提供了完整的代码示例和实战案例,帮助读者掌握这一经典序列匹配算法在基因组学和蛋白质组学研究中的应用。

weixin_30329623的博客 1334

STM32L431电池供电项目实战:用STOP2模式把功耗降到5uA以下(CubeMX配置详解)

本文详细介绍了如何在STM32L431电池供电项目中利用STOP2模式实现5μA以下的超低功耗设计。通过CubeMX配置、硬件优化和软件策略,成功将农业温湿度监测节点的待机功耗控制在4.7μA,确保CR2032电池供电下3年以上的工作寿命。文章包含完整的低功耗实现路径和实测数据,特别适合物联网边缘设备开发者参考。

weixin_30345577的博客 393

揭秘DNA比对核心算法:用Python高效实现BLAST与Needleman-Wunsch

掌握基因序列比对核心技术,本文深入解析Python在生物信息学中的基因序列比对算法实现,涵盖BLAST与Needleman-Wunsch算法原理及高效Python实现方法,适用于序列相似性分析、基因功能预测等场景,兼顾准确性与运行效率,生物信息学实战必备,值得收藏。

QuickCode的博客 738

Ardupilot二次开发(二):自定义mavlivk消息

在下面的文件添加自定义消息的xml定义然后编译固件,会生成相应的消息头文件。

超维空间科技的博客 2312

流媒体之LL-HLS 低延时HLS协议

LL-HLS协议通过扩展了HLS协议,为实时直播场景提供了更丰富的功能,如延迟控制、播放列表增量更新、阻止播放列表重新加载等。同时客户端可以更灵活地控制播放列表的加载和播放,以适应各种场景和需求。LL-HLS在直播中的延时可以控制在3s内, 但是即使这样, 还是不如RTMP, RTSP等协议的实时性。

技术控的笔记 3364

用Python实现生信分析——序列比对(Sequence Alignment)详细讲解

局部比对(Local Alignment)是指在两条序列中寻找相似的局部区域进行比对。它允许我们在长度不相等或部分相似的序列中找到最相似的片段。局部比对尤其适用于在大多数序列差异较大但在某些部分具有高度相似性的情况下。

qq_41698317的博客 3808

YOLOv8 眼底病变检测(眼底照片)详细说明

本文介绍了基于YOLOv8的眼底病变自动检测系统。该系统可识别糖尿病视网膜病变、青光眼等5类常见眼底病变,包括微动脉瘤、出血点等特征。核心技术包含图像预处理、模型训练、病变检测与量化分析三个模块,采用1024×1024高分辨率输入,针对医学图像特点优化数据增强策略。系统支持批量处理、可视化标注和临床报告生成,提供病变数量、面积密度和严重程度评分等量化指标。特别强调医学合规性要求,需专业医生参与数据标注和模型验证,符合医疗器械认证标准。该系统可作为眼科医生的辅助诊断工具,提高眼底病变筛查效率。

u010117029的博客 133

LCS算法如何实现DNA序列全局比对

序列比对是生物信息学的基础计算任务,其本质是将DNA等生物大分子视为可计算的字符串,通过动态规划求解最优匹配关系。LCS(最长公共子序列)作为最简化的字符串对齐模型,揭示了比对的核心逻辑:在保留字符顺序的前提下最大化共同子结构。尽管LCS本身不处理空位,但它为Needleman-Wunsch等全局比对算法提供了理论骨架和教学入口;引入空位惩罚与打分矩阵后,该框架即可量化进化事件(如插入、缺失),支撑物种鉴定、突变筛查与功能域定位等关键应用。本文以DNA序列为例,详解LCS从概念建模、内存优化到生物学解释的完

533

【重温童年】基于tkinter模块设计的Q宠大乐斗武器升星模拟器:重温经典,畅享休闲时光

与传统的Q宠大乐斗不同,这款模拟器还加入了一个创新的功能——自定义升星概率。玩家可以根据自己的喜好和策略,为不同的武器设置不同的成功率和降级率。比如,你可以将“嗜血”这把武器的升星难度设置得极高,以体现其稀有性和强大威力;也可以将“平底锅”这样的普通武器设置得相对容易升星,让玩家在升级过程中感受到更多的成就感。这种自定义的概率设置,不仅增加了游戏的趣味性和挑战性,还让玩家在升级过程中有了更多的策略和选择。你可以根据自己的武器库和卷轴数量,制定出最合适的升级计划,从而在游戏中占据先机。

nmdbbzcl的博客 1236

MeloTTS 生成 RKNN 模型

摘要: 本方案基于RK3588平台,利用RKNN工具链实现高效语音合成(TTS)。采用MeloTTS开源模型,支持中英文混合语音生成。部署流程包括:1) 导出ONNX模型;2) 转换为RKNN格式;3) 在RK3588开发板运行。关键步骤包含环境配置(RKNN Toolkit2≥1.4.0)、模型转换(非量化处理)及音频处理实现。方案充分发挥RK3588的NPU加速能力,适用于边缘设备语音合成场景

J。 347

【Python基因序列比对实战】:从零实现生物信息学经典算法(20年专家亲授)

掌握基因序列比对核心技术,本文深入解析Python在生物信息学中的基因序列比对算法实现,涵盖动态规划与NW算法,适用于序列相似性分析与变异检测,高效精准,代码可复用,值得收藏。

SimProceed的博客 1011

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

揭秘基因序列比对中的动态规划:如何高效实现全局与局部比对

掌握基因序列比对核心技术,高效解决生物信息学难题。本文深入解析基于动态规划的基因序列的序列比对方法,涵盖全局与局部比对的应用场景、算法原理及性能优势,助你精准识别序列相似性。算法清晰易实现,值得收藏。

ProceGlow的博客 833

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

如何得到两个蛋白质序列的一致性和相似性

identity指的是对应位置上相同残基的数目占总长度的百分数。 similarity指的是对应位置上相同和相似的参基占总数的百分数。

weixin_42038527的博客 9025

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

揭秘DNA序列比对算法:Python如何高效处理海量生物数据

掌握基因序列比对的高效方法,本文深入解析Python在生物信息学中的基因序列分析应用,涵盖BLAST算法实现、序列比对与大规模数据处理技巧。利用Biopython工具快速解析FASTA文件,提升分析效率。适用于基因组研究与变异检测,值得收藏。

InstrWander的博客 522
上一篇: POVME3使用的一些前置处理及 example 所用 .ini 翻译
下一篇: GROMOS参数(、运行、索引、日志)相关文件解读
CocoCream
博客等级 码龄6年 195粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值