python - 我怎样才能使它更有效率?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()
解决方案
- 不要在循环中打开或关闭文件,而是在代码开头的变量中加载文件数据并将输出写入另一个变量并在代码末尾将其写入文件。
- 获取随机数据通常很昂贵。您可以一次加载 1000 个随机数,然后将它们用作随机数生成器。
- 使用 PyPy 作为解释器,它比 CPython 快 6 倍:https ://pypy.org/
- 如果还不够,请使用比 Python 更快的语言。我建议使用 Golang 或 C++:https ://dev.to/albertdugba/go-or-python-and-why-58ob
推荐阅读
- python - Python 3 MySQL 查找行数错误?
- c# - 在 C# 中删除 BST 的功能
- sql - 优化 SQL 查询以减少我必须运行的时间
- php - AuthenticatesUsers 文件在 Illuminate\Foundation\Auth\ 中不存在
- swift - 模仿 Apple 的入职风格的 SwiftUI 或 Swift 库
- python - 有没有办法使用 Int64 而不是 float 在 pandas >= 1.0.0 数据帧中加载 sql 查询?
- sql - Oracle PL/SQL 如何存储和获取动态多列查询
- c# - C# 如何一次处理 Entity Framework 和 ADO.NET
- docker - 使用 Nifi-Registry 和 Docker 对 Nifi 流文件进行版本控制和持久化
- python - Matplotlib 将绘图图向左移动