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

public abstract class DirichletSampler extends Object implements SharedStateObjectSampler<double[]>
Since:
1.4
  • Field Details

  • Constructor Details

    • DirichletSampler

      DirichletSampler(UniformRandomProvider rng)
      Parameters:
      rng - Generator of uniformly distributed random numbers.
  • Method Details

    • toString

      public String toString()
      Overrides:
      toString in class Object
    • sample

      public double[] sample()
      Create an object sample.
      Specified by:
      sample in interface ObjectSampler<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

      public abstract DirichletSampler withUniformRandomProvider(UniformRandomProvider rng)
      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:
      withUniformRandomProvider in interface SharedStateSampler<SharedStateObjectSampler<double[]>>
      Parameters:
      rng - Generator of uniformly distributed random numbers.
      Returns:
      the sampler
    • of

      public static DirichletSampler of(UniformRandomProvider rng, double... alpha)
      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

      public static DirichletSampler symmetric(UniformRandomProvider rng, int k, double alpha)
      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

      private static SharedStateContinuousSampler createSampler(UniformRandomProvider rng, double alpha)
      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