【问题标题】:Biopython Global Alignment : Out of MemoryBiopython 全局对齐:内存不足
【发布时间】:2016-09-07 17:19:05
【问题描述】:

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

  1. 我尝试使用64-bit python,因为我的个人电脑有4gb RAM。
  2. sshed 到具有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()

【问题讨论】:

  • 您有多少个.dna 文件?
  • 有 100 个文件夹,每个文件夹有 1-10 个.dna 文件。我现在只在 1 个包含 2 个文件的文件夹上尝试此操作
  • 每个文件有多行,还是只有一行很长?
  • 现在只有 1 条很长的线。

标签: python biopython


【解决方案1】:

所以学校服务器终于完成了任务。我意识到,对于每个对齐方式,都会构建和计算 1000 个矩阵。 align.globalxx 方法有一个变量MAX_ALIGNMENT,默认设置为1000。通过monkey patching dint 改变它真的改变了任何东西。文档说,该方法尝试所有可能的对齐方式(是的 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)。所以可能应该考虑一种更有效的方式来读取矩阵中的序列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-30
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多