首页 > 解决方案 > 我怎样才能使它更有效率?Python DNA 生成器

问题描述

我有一个代码可以生成 DNA,然后复制 dna 链多次,然后在随机点切割每一行。我至少需要能够生成 20k 行,但这需要 30 分钟。我想知道是否有办法让这段代码更有效率?谢谢

import sys
import numpy as NP
import fileinput
import re
import random

#Generate Random DNA Sequence

def random_dna_sequence(length):
    return ''.join(random.choice('ACTG') for each in range(length))
#DNA sequences with equal base probability

def base_frequency(dna):
    D = {}
    for base in 'ATCG':
        D[base] = dna.count(base)/float(len(dna))
    return D

for each in range(1):
    dna = random_dna_sequence(300)
    f= open("GeneratedDNA.txt", "w+")
    print(dna, file=f)
    f.close()
    f= open("OrigionalStrand.txt", "w+")
    print(dna, file=f)
    f.close()

Value =int(input("Enter How Many Replica Strands You Want to Generate: "))
for x in range(Value):
    with open("GeneratedDNA.txt") as f_in, open("GeneratedDNA.txt", "a") as f_out :
        for row in f_in.readlines()[-1:] :
            f_out.write(row)
            f_out.close()

min_no_space = 55 #minimum length without spaces
max_no_space = 75 # max sequence length without space
no_space = 0
with open("GeneratedDNA.txt","r") as f, 
open("GeneratedShortReads.txt","w") as w: 
    for line in f:
        for c in line:
            w.write(c)
            if no_space > min_no_space:
                if random.randint(1,9) == 1 or no_space >= max_no_space:
                    w.write("\n")
                    no_space = 0
            else:
                no_space += 1
    f.close()
    w.close()

标签: pythonperformancerammemory-efficient

解决方案


  1. 不要在循环中打开或关闭文件,而是在代码开头的变量中加载文件数据并将输出写入另一个变量并在代码末尾将其写入文件。
  2. 获取随机数据通常很昂贵。您可以一次加载 1000 个随机数,然后将它们用作随机数生成器。
  3. 使用 PyPy 作为解释器,它比 CPython 快 6 倍:https ://pypy.org/
  4. 如果还不够,请使用比 Python 更快的语言。我建议使用 Golang 或 C++:https ://dev.to/albertdugba/go-or-python-and-why-58ob

推荐阅读