Class DirichletSampler
java.lang.Object
org.apache.commons.rng.sampling.distribution.DirichletSampler
- All Implemented Interfaces:
ObjectSampler<double[]>, SharedStateObjectSampler<double[]>, SharedStateSampler<SharedStateObjectSampler<double[]>>
- Direct Known Subclasses:
DirichletSampler.GeneralDirichletSampler, DirichletSampler.SymmetricDirichletSampler
Sampling from a Dirichlet
distribution.
Sampling uses:
- Since:
- 1.4
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static final classSample from a Dirichlet distribution with different concentration parameters for each category.private static final classSample from a symmetric Dirichlet distribution with the same concentration parameter for each category. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate static final intThe minimum number of categories.private final UniformRandomProviderRNG (used for the toString() method). -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate static SharedStateContinuousSamplercreateSampler(UniformRandomProvider rng, double alpha) Creates a gamma sampler for a category with the given concentration parameter.protected abstract intgetK()Gets the number of categories.private static booleanisNonZeroPositiveFinite(double x) Return true if the value is non-zero, positive and finite.protected abstract doublenextGamma(int category) Create a gamma sample for the given category.static DirichletSamplerof(UniformRandomProvider rng, double... alpha) Creates a new Dirichlet distribution sampler.double[]sample()Create an object sample.static DirichletSamplersymmetric(UniformRandomProvider rng, int k, double alpha) Creates a new symmetric Dirichlet distribution sampler using the same concentration parameter for each category.toString()private static voidvalidateNumberOfCategories(int k) Validate the number of categories.abstract DirichletSamplerCreate a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.Methods inherited from class Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface ObjectSampler
samples, samples
-
Field Details
-
MIN_CATGEORIES
private static final int MIN_CATGEORIESThe minimum number of categories.- See Also:
-
rng
RNG (used for the toString() method).
-
-
Constructor Details
-
DirichletSampler
DirichletSampler(UniformRandomProvider rng) - Parameters:
rng- Generator of uniformly distributed random numbers.
-
-
Method Details
-
toString
-
sample
public double[] sample()Create an object sample.- Specified by:
samplein interfaceObjectSampler<double[]>- Returns:
- a sample.
-
getK
protected abstract int getK()Gets the number of categories.- Returns:
- k
-
nextGamma
protected abstract double nextGamma(int category) Create a gamma sample for the given category.- Parameters:
category- Category.- Returns:
- the sample
-
withUniformRandomProvider
Create a new instance of the sampler with the same underlying state using the given uniform random provider as the source of randomness.- Specified by:
withUniformRandomProviderin interfaceSharedStateSampler<SharedStateObjectSampler<double[]>>- Parameters:
rng- Generator of uniformly distributed random numbers.- Returns:
- the sampler
-
of
Creates a new Dirichlet distribution sampler.- Parameters:
rng- Generator of uniformly distributed random numbers.alpha- Concentration parameters.- Returns:
- the sampler
- Throws:
IllegalArgumentException- if the number of concentration parameters is less than 2; or if any concentration parameter is not strictly positive.
-
symmetric
Creates a new symmetric Dirichlet distribution sampler using the same concentration parameter for each category.- Parameters:
rng- Generator of uniformly distributed random numbers.k- Number of categories.alpha- Concentration parameter.- Returns:
- the sampler
- Throws:
IllegalArgumentException- if the number of categories is less than 2; or if the concentration parameter is not strictly positive.
-
validateNumberOfCategories
private static void validateNumberOfCategories(int k) Validate the number of categories.- Parameters:
k- Number of categories.- Throws:
IllegalArgumentException- if the number of categories is less than 2.
-
createSampler
Creates a gamma sampler for a category with the given concentration parameter.- Parameters:
rng- Generator of uniformly distributed random numbers.alpha- Concentration parameter.- Returns:
- the sampler
- Throws:
IllegalArgumentException- if the concentration parameter is not strictly positive.
-
isNonZeroPositiveFinite
private static boolean isNonZeroPositiveFinite(double x) Return true if the value is non-zero, positive and finite.- Parameters:
x- Value.- Returns:
- true if non-zero positive finite
-