Если вы просто пытаетесь генерировать короткие чтения (например, Illumina или аналогичные) из последовательности ДНК, попробуйте это, это намного быстрее, чем ваш код
import numpy as np
def random_dna_sequence(length):
return ''.join(random.choice('ACTG') for each in range(length))
Мы начнем со случайной ДНКпоследовательность длиной 500 000 п.н.Исходя из этого, мы сделаем 20000 коротких операций чтения со средней длиной 60 б.п. со стандартным отклонением 10 б.п.:
seq_len = 500000
mean_read_length = 60
read_length_sd = 10
num_reads = 20000
my_dna = random_dna_sequence(seq_len)
# Generate random read lengths
read_lengths = [int(x) for x in np.random.normal(mean_read_length,read_length_sd,num_reads)]
# Generate random offsets
offsets = np.random.randint(0,seq_len,num_reads)
# Make the reads
reads = [my_dna[offset:offset+length] for offset,length in zip(offsets,read_lengths)]
# Add code to write reads to file ...