flopscope.numpy.random.dirichlet
fnp.random.dirichlet(alpha, size=None)[flopscope source]
Draw samples from the Dirichlet distribution.
Adapted from NumPy docs np.random.dirichlet
Sampling; cost = numel(output).
Draw size samples of dimension k from a Dirichlet distribution. A Dirichlet-distributed random variable can be seen as a multivariate generalization of a Beta distribution. The Dirichlet distribution is a conjugate prior of a multinomial distribution in Bayesian inference.
New code should use the dirichlet method of a Generator instance instead; please see the random-quick-start.
Parameters
- alpha:sequence of floats, length k
Parameter of the distribution (length
kfor sample of lengthk).- size:int or tuple of ints, optional
Output shape. If the given shape is, e.g.,
(m, n), thenm * n * ksamples are drawn. Default is None, in which case a vector of lengthkis returned.
Returns
- samples:ndarray,
The drawn samples, of shape
(size, k).
Raises
- :ValueError
If any value in
alphais less than or equal to zero
See also
- we.flops.random.Generator.dirichlet which should be used for new code.
Notes
The Dirichlet distribution is a distribution over vectors that fulfil the conditions and .
The probability density function of a Dirichlet-distributed random vector is proportional to
where is a vector containing the positive concentration parameters.
The method uses the following property for computation: let be a random vector which has components that follow a standard gamma distribution, then is Dirichlet-distributed
References
1
David McKay, "Information Theory, Inference and Learning
Algorithms," chapter 23,
https://www.inference.org.uk/mackay/itila/2
Wikipedia, "Dirichlet distribution",
https://en.wikipedia.org/wiki/Dirichlet_distributionExamples
Taking an example cited in Wikipedia, this distribution can be used if one wanted to cut strings (each of initial length 1.0) into K pieces with different lengths, where each piece had, on average, a designated average length, but allowing some variation in the relative sizes of the pieces.
>>> s = flops.random.dirichlet((10, 5, 3), 20).transpose()>>> import matplotlib.pyplot as plt
>>> plt.barh(range(20), s[0])
>>> plt.barh(range(20), s[1], left=s[0], color='g')
>>> plt.barh(range(20), s[2], left=s[0]+s[1], color='r')
>>> plt.title("Lengths of Strings")