Source code for chaospy.distributions.collection.log_uniform

"""Log-uniform distribution."""
import numpy

from ..baseclass import SimpleDistribution, ShiftScaleDistribution


class log_uniform(SimpleDistribution):
    """Log-uniform distribution."""

    def __init__(self, lo=0, up=1):
        super(log_uniform, self).__init__(dict(lo=lo, up=up))

    def _pdf(self, x, lo, up):
        return 1.0 / (x * (up - lo))

    def _cdf(self, x, lo, up):
        return (numpy.log(x) - lo) / (up - lo)

    def _ppf(self, q, lo, up):
        return numpy.e ** (q * (up - lo) + lo)

    def _lower(self, lo, up):
        return numpy.e**lo

    def _upper(self, lo, up):
        return numpy.e**up

    def _mom(self, k, lo, up):
        return (
            (numpy.e ** (up * k) - numpy.e ** (lo * k)) / ((up - lo) * (k + (k == 0)))
        ) ** (k != 0)


[docs]class LogUniform(ShiftScaleDistribution): """ Log-uniform distribution Args: lower (float, Distribution): Location of lower threshold of uniform distribution. upper (float, Distribution): Location of upper threshold of uniform distribution. scale (float, Distribution): Scaling parameter shift (float, Distribution): Location parameter Examples: >>> distribution = chaospy.LogUniform(0.5, 1.5) >>> distribution LogUniform(0.5, 1.5) >>> uloc = numpy.linspace(0, 1, 6) >>> uloc array([0. , 0.2, 0.4, 0.6, 0.8, 1. ]) >>> xloc = distribution.inv(uloc) >>> xloc.round(3) array([1.649, 2.014, 2.46 , 3.004, 3.669, 4.482]) >>> numpy.allclose(distribution.fwd(xloc), uloc) True >>> distribution.pdf(xloc).round(3) array([0.607, 0.497, 0.407, 0.333, 0.273, 0.223]) >>> distribution.sample(4).round(3) array([3.17 , 1.85 , 4.264, 2.67 ]) >>> distribution.mom(1).round(3) 2.833 """
[docs] def __init__(self, lower=0, upper=1, scale=1, shift=0): super(LogUniform, self).__init__( dist=log_uniform(lower, upper), scale=scale, shift=shift, repr_args=[lower, upper], )