def _marginal_densities(self, samples):
'''
Evaluate marginal densities and cumulative distribution functions.
Parameters
----------
samples : array_like
n-by-d matrix of samples where n is the number of samples and d
is the number of marginals.
Returns
-------
dout : dictionary
The densities and cumulative distribution functions. Keys:
`logpdf`: Equal to first element of `logp`.
'logp': Log of the probability density function.
'cdfp': Upper cumulative distribution functions.
'cdfm': Lower cumulative distribution functions.
'is_continuous': List of booleans where element i is `True` if
output element i is continuous.
'''
logp = np.zeros(samples.shape)
cdfp = np.zeros(samples.shape)
cdfm = np.zeros(samples.shape)
is_continuous = np.zeros(len(self.marginals), dtype=bool)
for k, marginal in enumerate(self.marginals):
is_continuous[k] = marginal.is_continuous
cdfp[:, k] = marginal.cdf(samples[:, k])
if marginal.is_continuous:
logp[:, k] = marginal.logpdf(samples[:, k])
else:
cdfm[:, k] = marginal.cdf(samples[:, k] - 1)
old_settings = np.seterr(divide='ignore')
logp[:, k] = np.log(np.maximum(0, cdfp[:, k] - cdfm[:, k]))
np.seterr(**old_settings)
logpdf = logp[:, self.output_layer.input_indices[0][0]]
dout = {'logpdf': logpdf, 'logp': logp, 'cdfp': cdfp, 'cdfm': cdfm,
'is_continuous': is_continuous}
return dout
评论列表
文章目录