为了账号安全,请及时绑定邮箱和手机立即绑定

生成具有给定(数字)分布的随机数

生成具有给定(数字)分布的随机数

白猪掌柜的 2019-11-17 16:12:58
生成具有给定(数字)分布的随机数我有一个文件,其中包含一些不同值的概率,例如:1 0.12 0.053 0.054 0.25 0.46 0.2我想用这个发行版生成随机数。是否存在处理此问题的现有模块?自己编写代码相当简单(构建累积密度函数,生成随机值[0,1]并选择相应的值)但似乎这应该是一个常见问题,可能有人创建了一个函数/模块它。我需要这个,因为我想生成一个生日列表(不遵循标准random模块中的任何分发)。
查看完整描述

3 回答

?
互换的青春

TA贡献1797条经验 获得超6个赞

从Python 3.6开始,Python的标准库就有了解决方案,即random.choices

用法示例:让我们设置一个与OP问题匹配的总体和权重:

>>> from random import choices>>> population = [1, 2, 3, 4, 5, 6]>>> weights = [0.1, 0.05, 0.05, 0.2, 0.4, 0.2]

现在choices(population, weights)生成一个样本:

>>> choices(population, weights)4

可选的仅关键字参数k允许一次请求多个样本。这很有价值,因为random.choices在生成任何样本之前,每次调用时都需要做一些准备工作; 通过一次生成许多样本,我们只需要做一次准备工作。在这里,我们生成了一百万个样本,并用于collections.Counter检查我们得到的分布大致与我们给出的权重相匹配。

>>> million_samples = choices(population, weights, k=10**6)>>> from collections import Counter>>> Counter(million_samples)Counter({5: 399616, 6: 200387, 4: 200117, 1: 99636, 3: 50219, 2: 50025})



查看完整回答
反对 回复 2019-11-18
  • 3 回答
  • 0 关注
  • 282 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信