随机数字分布

问题描述 投票:1回答:1

我想知道是否可以根据几何分布但在数字列表内生成随机数。

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

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

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

我尝试使用以下内容:

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

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

python-3.x random distribution
1个回答
0
投票

好吧,我认为这是不可能的,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)
© www.soinside.com 2019 - 2024. All rights reserved.