我正在尝试global alignment
模块中的Biopython
方法。在短序列上使用它很容易,并且可以直接给出对齐矩阵。但是我真的需要在更大的序列上运行它(平均长度为2000 nucleatides (or) characters
)。但是我一直遇到Out of Memory
错误。我查看了SO并找到了this之前的问题。提供的答案没有帮助,因为它们链接到现在无法访问的this相同网站。除此之外,我尝试了以下步骤:
64-bit
python,因为我的个人计算机有4gb
个RAM。 ssh
加入了一个16gb
内存较小的学校服务器,并尝试在其上运行。它在接近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()
答案 0 :(得分:2)
所以学校服务器终于完成了任务。我意识到,对于每个比对,构建和计算了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
在小型服务器上)。因此,应该考虑一种更有效的方法来读取矩阵中的序列。