1

试图为 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

输出图

4

3 回答 3

1

Tensorflow_probabilty.Uniform 是一个连续分布,而不是离散的。所以它并不能真正适当地模拟掷骰子。

于 2019-08-17T19:59:17.633 回答
0

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

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

于 2019-08-17T19:42:33.580 回答
0

对于掷骰子,您需要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))

于 2019-08-19T19:35:30.277 回答