gpt4 book ai didi

Python 迭代脚本随着迭代的进行而变慢

转载 作者:行者123 更新时间:2023-12-05 07:05:53 26 4
gpt4 key购买 nike

我在项目中使用基因组树序列(参见 tree sequence toolkitRelate inference)。我的树序列包含大约 100 万棵树,每棵树包含 884 个样本。总结目标;我连续遍历树并检查函数中的每个样本,为每棵树中的每个样本输出 0-8 范围内的整数值。树从一棵树到下一棵树的变化很小,所以我实际上只查看发生变化的样本,并为那些没有发生变化的样本复制前一棵树的结果。树上的外环看起来像这样:

    predict=np.zeros((num_trees,num_samples), dtype=int)
progress_bar = tqdm.tqdm(total=num_trees)
results_prev=np.zeros((num_samples,(9*4)))
index=0
for diff in tree_sequence.edge_diffs():
tree=ts.at_index(index)
results = sam_sites(diff[2],tree, results_prev)
predict[index,:]=results
results_prev=results
del results
progress_bar.update()
index+=1
progress_bar.close()

虽然 sam_sites 函数看起来像这样:

    def sam_sites(diff, tree, results_prev):
nodes={diff[i].child for i in range(len(diff))}
samples_changed={leaf for node in nodes for leaf in tree.leaves(node)}

results_new=results_prev
results_new[np.array(list(samples_changed)),:]=0

for sam in sams_new:
"Extract a integer value for each of samples_changed and replace 0 in results_new array"
return results_new

当我第一次运行代码时,它运行得非常快,每秒处理大约 40 棵树。但随着迭代的继续,每秒处理的树木数量下降。我有一个脚本运行了 24 小时,处理速度下降到每秒 2 棵树。

根据其他搜索,我认为这可能是内存问题?也许在每次迭代时添加到预测 numpy 数组会增加使用的内存并减慢脚本速度?

最佳答案

解决了!由于某种原因,该行...

    tree=ts.at_index(index)

每次迭代都提取正确的树是速度变慢的原因。我用 .next() 函数代替了它。现在的代码是:

    predict=np.zeros((num_trees,num_samples), dtype=int)
progress_bar = tqdm.tqdm(total=num_trees)
results_prev=np.zeros((num_samples,(9*4)))
tree = tskit.Tree(ts)
index=0
for diff in tree_sequence.edge_diffs():
tree.next()
results = sam_sites(diff[2],tree, results_prev)
predict[index,:]=results
results_prev=results
del results
index+=1
progress_bar.update()
progress_bar.close()

这始终以每秒大约 30 棵树的速度运行。

关于Python 迭代脚本随着迭代的进行而变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62660222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com