我必须编写一个python程序,给定一个50mb的大DNA序列和一个约15个字符的小DNA序列,返回一个由15个字符组成的所有序列的列表,按它们与给定序列的接近程度以及它们在较大序列中的位置排序。你知道吗
我目前的方法是首先得到所有子序列:
def get_subsequences_of_size(size, data):
sequences = {}
i = 0
while(i+size <= len(data)):
sequence = data[i:i+size]
if sequence not in sequences:
sequences[sequence] = data.count(sequence)
i += 1
return sequences
然后根据问题所问的内容将它们打包在词典列表中(我忘了得到位置):
def find_similar_sequences(seq, data):
similar_sequences = {}
sequences = get_subsequences_of_size(len(seq), data)
for sequence in sequences.keys():
diffs, muts = calculate_similarity(seq,sequence)
if diffs not in similar_sequences:
similar_sequences[diffs] = [{"Sequence": sequence, "Mutations": muts}]
else:
similar_sequences[diffs].append({"Sequence": sequence, "Mutations": muts})
#similar_sequences[sequence] = {"Similarity": (len(sequence)-diffs), "Differences": diffs, "Mutatations": muts}
return similar_sequences
我的问题是这条路跑得太慢了。对于50MB的输入,完成处理需要30多分钟。你知道吗
以下方法如何:
在长序列和每个子序列上使用长度为15的滑动窗口:
这将输出子序列列表,这些子序列按它们与给定序列的接近程度排序。你知道吗
我还在一个50mb的FASTA文件上运行了这个脚本。在我的机器上,计算结果花了42秒,将结果写入文件又花了30秒(打印出来要花更长的时间!)你知道吗
相关问题 更多 >
编程相关推荐