【问题标题】:Generate list of numbers from a list with probability weights [closed]从具有概率权重的列表中生成数字列表[关闭]
【发布时间】:2021-02-16 14:36:57
【问题描述】:

如何从具有给定概率的 35 个数字列表中生成随机数列表:

数字在 (1,5) 范围内的概率 - p1 = 0.5

范围内数字的概率 (6,15) - p2 = 0.25

范围内数字的概率 (16,35) - p3 = 0.25

我尝试使用numpy.random.choice(),但我不知道如何插入可能的列表数字。

【问题讨论】:

  • 请从intro tour 重复on topichow to ask。 “告诉我如何解决这个编码问题”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后然后就您的算法或技术提出一个具体的问题。 Stack Overflow 并不打算取代现有的文档和教程。您似乎在要求个人教程;这与 Stack Overflow 无关。
  • 我假设您的意思是从具有权重的列表中生成一个随机数,否则请详细说明您的意思。谢谢。
  • @Ehsan 不,我的意思是生成具有这些权重的数字列表。基本上生成一个包含 35 个符号的字母表的离散源,其值应该在我在问题中提到的范围之一。
  • @ZlatanRadovanovic 您要生成的列表大小是多少?有没有更换?您可以在我的回答中将它们全部设置为 np.random.choice 的参数。
  • @Ehsan 我忽略了函数中的 size 参数,现在一切都很好。谢谢。

标签: python arrays numpy random probability


【解决方案1】:

如果要从每个组中统一选择:

p=np.array([0.5/5]*5+[0.25/30]*30)
np.random.choice(np.arange(1,36),p=p/p.sum())

更新

如果你想选择一个随机数列表(你也可以设置有或没有替换标志):

np.random.choice(np.arange(1,36), size=N, replace=True, p=p/p.sum())

【讨论】:

    【解决方案2】:

    您可以通过选择具有指定概率的适当范围来完成此操作,然后将所选范围用作random.choice 的参数:

    range_set = [range(1,6), range(6, 16), range(16, 36)]
    random.choice(*random.choices(range_set, [0.5, 0.25, 0.25]))
    

    这假设您希望在给定范围内进行统一选择。

    【讨论】:

      猜你喜欢
      • 2018-05-23
      • 2013-06-19
      • 1970-01-01
      • 2013-07-29
      • 2013-07-10
      • 1970-01-01
      • 1970-01-01
      • 2016-04-26
      • 2016-09-12
      相关资源
      最近更新 更多