import random
import time
fastadict = {"seq1" : "ATGCAGTCACGT", "seq2" : "ATGTGTGTACG"};
def resampling_f(fastadict, seq, num):
fastadict[seq] = fastadict[seq].replace("N","").replace("n","")
l = []
new_seq = ''.join([random.choice(fastadict[seq]) for i in range(num)])
l.append(new_seq)
return l
def resample_new(data, num):
new= ''.join([data[int(random.uniform(0,num))] for i in range(num)]);
return new
使用
numpy.random
模块,该模块提供矢量化采样和视图转换:Python 2版本:
^{pr2}$速度:
我比较了使用
random.choice
的版本与使用random.uniform
的另一个版本。后者更快。后者根据字符串的长度生成随机数重新采样,并将其作为字符串的索引。在这里有两个要比较的函数:您的}。在
resampling_f
和{与其在循环内
fastadict[seq].replace....
,不如在循环外执行,这样只需执行一次。在下面是比较它们的代码:
^{pr2}$我得到了}秒。在
total_1
是3.6
秒,total_2
是{如果20万次重采样,我得到第一个
37
秒,第二个是28
秒。在我怀疑它慢的原因是每次你调用random_choice时,它都会覆盖整个系列。相反,您可以在一个系列中设置一个范围,计算每个项目出现的次数,然后从该分布中取样,例如使用numpy.random.choice。在
相关问题 更多 >
编程相关推荐