如何使用Pymc3模拟6面骰子卷?另外,我知道骰子的不同侧面有不同的分布吗?
答案 0 :(得分:6)
在PyMC3
中模拟1000卷公平6面模具的最简单方法是
import pymc3 as pm
with pm.Model():
rolls = pm.DiscreteUniform('rolls', lower=1, upper=6)
trace = pm.sample(1000)
trace['rolls'] # shows you the result of 1000 rolls
请注意,调用np.random.randint(1, 7, size=1000)
的速度较慢,但相当。
1000卷不公平的模具
probs = np.array([0.1, 0.2, 0.3, 0.2, 0.1, 0.1])
with pm.Model():
rolls = pm.Multinomial('rolls', n=1000, p=probs, shape=6)
trace = pm.sample(1)
与np.random.multinomial(1000, pval=probs)
相比,它更等效,但速度更慢。
你想要使用PyMC3
的情况是,如果你观察到50卷不公平的骰子,有一些之前的期望这是一个公平的死亡,并希望评估该期望的后验。这是一个例子:
observations = np.array([20, 6, 6, 6, 6, 6])
with pm.Model():
probs = pm.Dirichlet('probs', a=np.ones(6)) # flat prior
rolls = pm.Multinomial('rolls', n=50, p=probs, observed=observations)
trace = pm.sample(1000)
trace['probs'] # posterior samples of how fair the die are
您可以使用内置的traceplot
查看示例的外观:
请注意,我们正确地确定其中一方比其他方更频繁出现!
答案 1 :(得分:0)
您可以使用随机模块生成伪随机数。以下是我的工作示例。
import random
def roll_dice(num_sides=6):
return random.randint(0,num_sides-1) + 1
if __name__ == '__main__':
result = roll_dice(num_sides=2)
print(result)