gpt4 book ai didi

python - 从 python 列表中快速、独立地随机抽取/抽样-固定概率,而不是总数

转载 作者:行者123 更新时间:2023-11-28 22:45:45 33 4
gpt4 key购买 nike

我想从列表中抽取项目样本,但我想设置每个项目被包含的概率,而不是要抽取的项目总数(所以 random.sample( ) 不起作用)。我用下面的代码得到了我想要的效果(其中 p 是包含的概率,items 是事物的列表):

[item for item in items if random.random() < p]

但是速度很慢。有什么加快速度的建议吗?

该列表最多有 1000 万个项目,并且是单一类型的(所有整数),所以也许有一个 numpy/pandas 解决方案?

谢谢!

尼克

最佳答案

结果样本中的项目数量(np 概率独立尝试)具有二项分布,因此可以快速随机生成,例如 NumPy :

sample_size = numpy.random.binomial(len(population). p)

现在,the_sample = random.sample(population, sample_size) 可以准确地满足您的需求——相当于以相同的概率随机、独立地挑选总体中的每个项目 p

这是基于您的示例代码,您说它太慢但也说它在其他方面还可以——即,人口中的每个项目都使用相同的 p。如果每个项目都有完全不同的 p,这将无法工作(如果有几个不同的 p 值,它可以通过分层抽样工作——将总体分为统一的,每个子种群都有一个 p 的值,并独立地从每个子种群中获取样本,然后将它们合并)。

关于python - 从 python 列表中快速、独立地随机抽取/抽样-固定概率,而不是总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28205593/

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