【发布时间】:2016-08-28 23:27:32
【问题描述】:
我很想通过删除一些 for 循环和使用数组来加快我的代码速度。现在最慢的一步是随机列表的生成。
上下文:我的染色体中有许多突变,我想执行 1000 条具有相同长度和相同突变数量的随机“染色体”,但它们的位置是随机的。
这是我目前正在运行以生成这些随机突变位置:
iterations=1000
Chr_size=1000000
num_mut=500
randbps=[]
for k in range(iterations):
listed=np.random.choice(range(Chr_size),num_mut,replace=False)
randbps.append(listed)
我想做一些类似于他们在this question 中介绍的事情
np.random.choice(range(Chr_size),size=(num_mut,iterations),replace=False)
但不替换则适用于整个数组。
进一步的上下文:稍后在脚本中,我遍历每个随机染色体并计算给定窗口中的突变数量:
for l in range(len(randbps)):
arr=np.asarray(randbps[l])
for i in range(chr_last_window[f])[::step]:
counter=((i < arr) & (arr < i+window)).sum()
【问题讨论】:
-
您不希望任何
listeds 相同,这意味着randbps的元素应该是唯一的? -
这是由长期存在的性能问题引起的:github.com/numpy/numpy/issues/2764
标签: python arrays numpy random vectorization