我正在尝试global alignment
模块中的Biopython
方法。在短序列上使用它很容易,并且可以直接给出比对矩阵。但是我确实需要在我拥有的更大序列上运行它(平均长度为2000 nucleatides (or) characters
)。但是我一直遇到Out of Memory
错误。我查看了SO,发现this上一个问题。提供的答案没有帮助,因为它们链接到现在无法访问的this同一个网站。除此之外,我还尝试了以下步骤:
由于我的个人计算机具有64-bit
RAM,因此我尝试使用4gb
python。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
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
)。因此,应该考虑一种更有效的读取矩阵序列的方法。关于python - Biopython全局比对:内存不足,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26320409/