"Если у меня есть ребра бина и счетчики для каждого бина, есть ли хороший лаконичный способ выборки из функции плотности вероятности, из которой это вытекает?"
Это как раз тот случай, когда scipy.stats.rv_histogram
.
Вот пример.
Сначала сгенерируйте некоторые данные гистограммы, которые мы можем использовать для примера.
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')