【问题标题】:Random geometric distribution across numbers跨数字的随机几何分布
【发布时间】:2020-02-07 13:46:43
【问题描述】:

我想知道是否可以在一个数字列表中生成遵循几何分布的随机数。

假设我有一个列表,例如:

a = [2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6] 

我想随机生成 81 个值,保持 p 值为 0.3。

我尝试使用以下内容:

z = np.random.geometric(p=0.3, size=81)

但是我怎样才能只从特定的数字列表中提取呢?

【问题讨论】:

  • 您将需要提供有关您要查找的内容的更多详细信息,因为无论它是什么,它都不是几何图形,因为您请求的是有界范围。如果您将几何视为起点,则需要告诉我们未使用的概率在哪里。这一切都堆积在第一个结果,最后一个结果,从左边数第三个结果上吗?它是否在候选人之间平均分配?你是否继续概率的几何衰减但循环回到开始?您的问题无法按书面回答。
  • 感谢您的回复。我正在阅读一篇论文,作者提到了这一点:“每次试验都从一个持续可变时间的灰色注视点开始。注视点的持续时间是从几何分布中选择的(p=0.3;2000-6000 毫秒,以 500 毫秒为步长)”。我试图做的是复制这个过程。

标签: python-3.x random distribution


【解决方案1】:

好吧,我认为这是不可能的,Geometric distribution 未绑定。

你可以做类似的事情

import numpy as np

p = 0.3
a = [2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6]

q = np.random.geometric(p, size = 81) - 1
t = [a[k] for k in q]

print(t)

但有时会抛出 IndexError 异常。

您可能会考虑为索引设置上限并自行构建概率

# build normalized geometric-like probabilities
prb = np.asarray([p*(1.0-p)**k for k in range(0, len(a))])
prb /= np.sum(prb)

result = np.random.choice(a, size=81, replace = True, p=prb)

print(result)

【讨论】:

  • 亲爱的 Severin,非常感谢。我正在尝试它,到目前为止它似乎工作。我只添加了一个while循环,这样索引错误不会有任何影响。
  • @giorgio-p 很高兴听到,如果可行,请接受答案,让我们继续前进
  • p 从 0.03 更改为 0.3 会有很大的不同。获得值 > 9(您拥有的索引数量)的概率约为 2E-5。因此,您可以按照@SeverinPappadeux 的建议对概率进行归一化,或者只将数组的索引生成为Geom(p) - 1,并拒绝并重试索引> 8。平均而言,拒绝只会在 10k 中发生两次。
猜你喜欢
  • 2014-06-24
  • 2019-04-11
  • 2016-11-09
  • 1970-01-01
  • 1970-01-01
  • 2010-09-16
  • 1970-01-01
  • 2012-03-10
  • 2011-08-08
相关资源
最近更新 更多