到目前为止,我已经有了这段代码,但我不知道它是否能解决问题,但是我在11和12中得到的结果太多,重复10000次,该图应该是对称的。问题出在哪里?
import numpy as np
import matplotlib.pyplot as plt
def roll_dice(n):
return [np.random.randint(1, 7) + np.random.randint(1, 7) for i in range(n)]
dices = roll_dice(10000)
plt.hist(dices)
答案 0 :(得分:2)
我认为,当可视化变得更加明确时,事情会变得更加清晰。通过指定bin范围(bins=...
),bin的对齐方式(align=...
)并在直方图中显示条形图之间的间隙(rwidth=...
),您可以更好地控制正在发生的事情。下面的代码与原始代码完全一样(尽管以一种稍微更优雅的方式):
N = int(1e5)
A = np.random.randint(low=1, high=7, size=N)
B = np.random.randint(low=1, high=7, size=N)
dice = A + B
plt.hist(dice, bins=np.arange(2, 14), align="left", rwidth=0.9)
plt.show()
结果:
答案 1 :(得分:1)
一切都很好。 :)这是分箱的讨厌产物。具体来说,尝试plt.hist(dices,bins=11)
自己看看。 (无需自行设置,默认情况下使用十个档,因此历史记录中的最后一个档包括变量的值,分别对应于“ 11”和“ 12” ...)
通常,在使用直方图(以及该bins
参数)时要格外小心,尤其是对于 integer 变量!
答案 2 :(得分:0)
您的代码工作正常,问题在于直方图功能的自动合并。 使用
plt.hist(dices, bins=11)
PS:欢迎使用stackoverflow!