def _get_smoothed_histogram(self, chain, parameter):
data = chain.get_data(parameter)
smooth = chain.config["smooth"]
if chain.grid:
bins = get_grid_bins(data)
else:
bins = chain.config['bins']
bins, smooth = get_smoothed_bins(smooth, bins, data, chain.weights)
hist, edges = np.histogram(data, bins=bins, normed=True, weights=chain.weights)
edge_centers = 0.5 * (edges[1:] + edges[:-1])
xs = np.linspace(edge_centers[0], edge_centers[-1], 10000)
if smooth:
hist = gaussian_filter(hist, smooth, mode=self.parent._gauss_mode)
kde = chain.config["kde"]
if kde:
kde_xs = np.linspace(edge_centers[0], edge_centers[-1], max(200, int(bins.max())))
ys = MegKDE(data, chain.weights, factor=kde).evaluate(kde_xs)
area = simps(ys, x=kde_xs)
ys = ys / area
ys = interp1d(kde_xs, ys, kind="linear")(xs)
else:
ys = interp1d(edge_centers, hist, kind="linear")(xs)
cs = ys.cumsum()
cs /= cs.max()
return xs, ys, cs
评论列表
文章目录