np.random.choice在直方图中有一个缺口 说明解决方案

我正在使用np.random.choice构造投掷2个均匀加权骰子的总和的直方图。但是,当我运行代码时,应该获得最大回报的7值会丢失。

import numpy as np
import matplotlib.pyplot as plt

values = [1,2,3,4,5,6]
z = 1/6
x = np.random.choice(values,1000000,p=[z,z,z])
y = np.random.choice(values,z])

plt.hist(x + y,12,color="green",edgecolor='black',linewidth=1.2,label="Uniform Dist",rwidth=.75)
plt.show()

np.random.choice在直方图中有一个缺口
      
    说明解决方案

有什么问题的建议吗?

goldgrass 回答:np.random.choice在直方图中有一个缺口 说明解决方案

间隔6.167 <= x < 7.0中没有值。数字7包含在间隔7.0 <= x < 7.833中。

我建议绘制离散频率的条形图。

plt.bar(*np.unique(x+y,return_counts=True))

enter image description here

,

问题在于plt.hist分箱算法适用于真实值,而不适用于 integer (离散)值。

说明

让我们看看matplotlib提出的垃圾箱:

n,bins,_ = plt.hist(x + y,bb,color="green",edgecolor='black',linewidth=1.2,label="Uniform Dist",rwidth=.75)

bins是:

array([ 2.,2.83333333,3.66666667,4.5,5.33333333,6.16666667,7.,7.83333333,8.66666667,9.5,10.33333333,11.16666667,12.        ])

第六栏的范围[bins[5],bins[6])等于[6.17,7.00)-注意,它是半开的。因此整数属于此范围。

解决方案

解决方案是手动设置垃圾箱:

values = x + y
bins = np.arange(np.min(values) - .5,np.max(values) + 0.5,1)

plt.hist(values,rwidth=.75)

bins等于array([0.5,1.5,2.5,3.5,5.5,...,10.5,11.5,12.5])

本文链接:https://www.f2er.com/3164365.html

大家都在问