概率质量函数总和 2 掷骰子?

Probability mass function sum 2 dice roll?

尝试绘制 2 个骰子总和的 pmf,但出现了一些右尾问题。

我已经尝试使用 numpy 和其他 python 库,但问题仍然存在:

import tensorflow as tf
tf.enable_eager_execution()
import tensorflow_probability as tfp
from matplotlib import pyplot as plt
import numpy as np

a=500000
dado1_=evaluate(tf.cast(tfp.distributions.Uniform(low=1,high=7).sample(a),tf.int32))
dado2_=evaluate(tf.cast(tfp.distributions.Uniform(low=1,high=7).sample(a),tf.int32))

plt.hist(np.add(dado1_,dado2_))
expecting symetric distribution centered at 7 with gaussian form,
assymetric found

outputplot

看图表,2 和 3 的刻度线之间的区域似乎是总和为 2 的掷骰数。3-4 是 3,依此类推。

是否有可能在刻度线 11 和 12 之间包含总和为 11 12 的卷数?它可以解释为什么图表右侧看起来比它应该的短,以及为什么最后一个柱比预期的高。

Tensorflow_probabilty.Uniform是连续分布,不是离散分布。所以它并不能真正正确地模拟掷骰子。

对于掷骰子,您需要 tfd.Categorical:

import tensorflow.compat.v2 as tf
tf.enable_v2_behavior()
import tensorflow_probability as tfp
tfd = tfp.distributions
tfb = tfp.bijectors

# 10 independent 1-die samples
print(tfb.AffineScalar(shift=1.)(tfd.Categorical(logits=tf.zeros([6]), dtype=tf.float32)).sample(10))

# 10 independent pairs-of-dice samples
d = tfb.AffineScalar(shift=1.)(tfd.Categorical(logits=tf.zeros([6]), dtype=tf.float32))
print(tfd.Sample(d, 2).sample(10))