Class DirichletSampler

    • Constructor Detail

      • DirichletSampler

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

      • toString

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

        public double[] sample()
        Description copied from interface: ObjectSampler
        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
      • 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:
        java.lang.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:
        java.lang.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:
        java.lang.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:
        java.lang.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