2019-02-28 20:32:30 +08:00

297 lines
7.5 KiB
Python

# coding=utf-8
#-----------------------------------------------------
# Author: Yaqiang Wang
# Date: 2018-3-20
# Purpose: MeteoInfoLab stats.distributions module
# Note: Jython
#-----------------------------------------------------
from org.apache.commons.math3.distribution import NormalDistribution, BetaDistribution, CauchyDistribution, \
ChiSquaredDistribution, ExponentialDistribution, FDistribution, GammaDistribution, GumbelDistribution, \
LaplaceDistribution, LevyDistribution, LogisticDistribution, LogNormalDistribution, NakagamiDistribution, \
ParetoDistribution, TDistribution, TriangularDistribution, UniformRealDistribution, WeibullDistribution
from _distn_infrastructure import rv_continuous
__all__ = [
'norm','beta','cauchy','chi2','expon','f','gamma','gumbel','laplace','levy','logistic','lognorm',
'nakagami','pareto','t','triang','uniform','weibull'
]
class norm_gen(rv_continuous):
'''
A normal continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a normal distribution object.
'''
loc, scale = self._parse_args(*args)
dist = NormalDistribution(loc, scale)
return dist
norm = norm_gen()
class beta_gen(rv_continuous):
'''
A beta continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a normal distribution object.
'''
loc, scale = self._parse_args(*args)
dist = BetaDistribution(loc, scale)
return dist
beta = beta_gen()
class cauchy_gen(rv_continuous):
'''
A cauchy continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a cauchy distribution object.
'''
loc, scale = self._parse_args(*args)
dist = CauchyDistribution(loc, scale)
return dist
cauchy = cauchy_gen()
class chi2_gen(rv_continuous):
'''
A chi squared continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a chi squared distribution object.
'''
dof = self._parse_args(*args)[0]
dist = ChiSquaredDistribution(dof)
return dist
chi2 = chi2_gen()
class expon_gen(rv_continuous):
'''
A exponential continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a exponential distribution object.
'''
mean = self._parse_args(*args)[0]
dist = ExponentialDistribution(mean)
return dist
expon = expon_gen()
class f_gen(rv_continuous):
'''
A F continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a F distribution object.
'''
loc, scale = self._parse_args(*args)
dist = FDistribution(loc, scale)
return dist
f = f_gen()
class gamma_gen(rv_continuous):
'''
A gamma continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a gamma distribution object.
'''
loc, scale = self._parse_args(*args)
dist = GammaDistribution(loc, scale)
return dist
gamma = gamma_gen()
class gumbel_gen(rv_continuous):
'''
A gumbel continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a gumbel distribution object.
'''
loc, scale = self._parse_args(*args)
dist = GumbelDistribution(loc, scale)
return dist
gumbel = gumbel_gen()
class laplace_gen(rv_continuous):
'''
A Laplace continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Laplace distribution object.
'''
loc, scale = self._parse_args(*args)
dist = LaplaceDistribution(loc, scale)
return dist
laplace = laplace_gen()
class levy_gen(rv_continuous):
'''
A Levy continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Levy distribution object.
'''
loc, scale = self._parse_args(*args)
dist = LevyDistribution(loc, scale)
return dist
levy = levy_gen()
class logistic_gen(rv_continuous):
'''
A logistic continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a logistic distribution object.
'''
loc, scale = self._parse_args(*args)
dist = LogisticDistribution(loc, scale)
return dist
logistic = logistic_gen()
class lognorm_gen(rv_continuous):
'''
A Log-normal continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Log-normal distribution object.
'''
scale, shape = self._parse_args(*args)
dist = LogNormalDistribution(scale, shape)
return dist
lognorm = lognorm_gen()
class nakagami_gen(rv_continuous):
'''
A Nakagami continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Nakagami distribution object.
'''
scale, shape = self._parse_args(*args)
dist = NakagamiDistribution(scale, shape)
return dist
nakagami = nakagami_gen()
class pareto_gen(rv_continuous):
'''
A Pareto continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Pareto distribution object.
'''
scale, shape = self._parse_args(*args)
dist = ParetoDistribution(scale, shape)
return dist
pareto = pareto_gen()
class t_gen(rv_continuous):
'''
A Student's t continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Student's t-distribution object.
'''
dof = self._parse_args(*args)[0]
dist = TDistribution(dof)
return dist
t = t_gen()
class triang_gen(rv_continuous):
'''
A Triangular continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Triangular distribution object.
'''
r = self._parse_args(*args)
if len(r) == 1:
c = r[0]
a = 0
b = c
else:
a = r[0]
c = r[2]
b = a + r[1] * c
dist = TriangularDistribution(a, c, b)
return dist
triang = triang_gen()
class uniform_gen(rv_continuous):
'''
A Uniform continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Uniform distribution object.
'''
scale, shape = self._parse_args(*args)
dist = UniformRealDistribution(scale, shape)
return dist
uniform = uniform_gen()
class weibull_gen(rv_continuous):
'''
A Weibull continuous random variable.
'''
def _create_distribution(self, *args):
'''
Create a Weibull distribution object.
'''
scale, shape = self._parse_args(*args)
dist = WeibullDistribution(scale, shape)
return dist
weibull = weibull_gen()