gpt4 book ai didi

python - Biopython 全局对齐 : Out of Memory

转载 作者:太空宇宙 更新时间:2023-11-04 01:13:19 25 4
gpt4 key购买 nike

我正在尝试 Biopython 模块中的 global alignment 方法。在短序列上使用它很容易,并且可以直接给出对齐矩阵。然而,我确实需要在我拥有的更大序列上运行它(平均长度为 2000 个核苷酸(或)字符)。但是,我一直遇到 Out of Memory 错误。我查看了 SO 并找到了 this上一个问题。提供的答案没有帮助,因为它们链接到 this现在无法访问的同一网站。除此之外,我尝试了以下步骤:

  1. 我尝试使用 64 位 python,因为我的个人计算机有 4gb RAM。
  2. ssh 连接到具有 16gb RAM 的小型学校服务器并尝试在其上运行。它在将近 4 小时后仍在运行。

由于它是一个小脚本,我不确定如何修改它。任何帮助将不胜感激。

我的脚本:

import os
from Bio import pairwise2
from Bio.pairwise2 import format_alignment

file_list = []

file_list = [each for each in os.listdir(os.getcwd()) if each.endswith(".dna")]

align_file = open("seq_align.aln","w")

seq_list = []

for each_file in file_list:
f_o = open(each_file,"r")
seq_list.append(f_o.read())

for a in pairwise2.align.globalmx(seq_list[0],seq_list[1]):
align_file.write(format_alignment(*a))

align_file.close()

最佳答案

于是学校服务器终于完成了任务。我意识到,对于每个比对,都会构建和计算 1000 个矩阵。 align.globalxx 方法有一个变量 MAX_ALIGNMENT,默认设置为 1000。通过 monkey patching 改变它真的改变了一切。文档说,该方法尝试了所有可能的比对(是 1000),但在我的例子中,所有矩阵都具有相同的比对分数(以及我尝试过的几个测试序列)。最后,文档中的一小段评论指出,如果您只需要 1 个分数,请使用可选参数 one_alignment_only,它仅接受 boolean 值。我所做的就是这样:

for a in pairwise2.align.globalmx(seq_list[0],seq_list[1],one_alignment_only=True):
align_file.write(format_alignment(*a))

这大大减少了时间。然而,我的 PC 仍然崩溃,所以我认为这是一项内存密集型任务,需要更多的 RAM(在小型服务器上为 16gb)。因此,可能应该考虑一种更有效的读取矩阵中序列的方法。

关于python - Biopython 全局对齐 : Out of Memory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26320409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com