“如果我有箱边缘和每个箱的计数,是否有一种很好的简洁方法可以从这意味着的概率密度函数中进行采样?”
情况正是如此scipy.stats.rv_histogram https://docs.scipy.org/doc/scipy/reference/generated/scipy.stats.rv_histogram.html.
这是一个例子。
首先,生成一些我们可以用于示例的直方图数据。
In [150]: sample = np.random.gamma(6, size=2000)
In [151]: hist, edges = np.histogram(sample, bins=5)
In [152]: hist
Out[152]: array([490, 949, 438, 100, 23])
In [153]: edges
Out[153]:
array([ 1.23006474, 4.19769156, 7.16531838, 10.13294519, 13.10057201,
16.06819883])
创建一个实例rv_histogram
与该数据。
In [154]: from scipy.stats import rv_histogram
In [155]: rv = rv_histogram((hist, edges))
生成随机样本rv
,并绘制其直方图。
In [156]: rv_sample = rv.rvs(size=100000)
In [157]: plt.hist(rv_sample, bins=50, alpha=0.5, edgecolor='k')