def rvs(self, size=1):
'''
Generates random variates from the mixed vine. Currently assumes a
c-vine structure.
Parameters
----------
size : integer, optional
The number of samples to generate. (Default: 1)
Returns
-------
array_like
n-by-d matrix of samples where n is the number of samples and d
is the number of marginals.
'''
if self.is_root_layer():
# Determine distribution dimension
layer = self
while not layer.is_marginal_layer():
layer = layer.input_layer
dim = len(layer.marginals)
samples = np.random.random(size=[size, dim])
(samples, _) = self.make_dependent(samples)
# Use marginals to transform dependent uniform samples
for i, marginal in enumerate(layer.marginals):
samples[:, i] = marginal.ppf(samples[:, i])
return samples
else:
return self.output_layer.rvs(size)
评论列表
文章目录