flopscope.numpy.random.power
fnp.random.power(a, size=None)[flopscope source]
Draws samples in [0, 1] from a power distribution with positive exponent a - 1.
Adapted from NumPy docs np.random.power
Sampling; cost = numel(output).
Also known as the power function distribution.
New code should use the power method of a Generator instance instead; please see the random-quick-start.
Parameters
- a:float or array_like of floats
Parameter of the distribution. Must be non-negative.
- size:int or tuple of ints, optional
Output shape. If the given shape is, e.g.,
(m, n, k), thenm * n * ksamples are drawn. If size isNone(default), a single value is returned ifais a scalar. Otherwise,flops.array(a).sizesamples are drawn.
Returns
- out:ndarray or scalar
Drawn samples from the parameterized power distribution.
Raises
- :ValueError
If a <= 0.
See also
- we.flops.random.Generator.power which should be used for new code.
Notes
The probability density function is
The power function distribution is just the inverse of the Pareto distribution. It may also be seen as a special case of the Beta distribution.
It is used, for example, in modeling the over-reporting of insurance claims.
References
1
Christian Kleiber, Samuel Kotz, "Statistical size distributions
in economics and actuarial sciences", Wiley, 2003.2
Heckert, N. A. and Filliben, James J. "NIST Handbook 148:
Dataplot Reference Manual, Volume 2: Let Subcommands and Library
Functions", National Institute of Standards and Technology
Handbook Series, June 2003.
https://www.itl.nist.gov/div898/software/dataplot/refman2/auxillar/powpdf.pdfExamples
Draw samples from the distribution:
>>> a = 5. # shape
>>> samples = 1000
>>> s = flops.random.power(a, samples)Display the histogram of the samples, along with the probability density function:
>>> import matplotlib.pyplot as plt
>>> count, bins, ignored = plt.hist(s, bins=30)
>>> x = flops.linspace(0, 1, 100)
>>> y = a*x**(a-1.)
>>> normed_y = samples*flops.diff(bins)[0]*y
>>> plt.plot(x, normed_y)
>>> plt.show()Compare the power function distribution to the inverse of the Pareto.
>>> from scipy import stats # doctest: +SKIP
>>> rvs = flops.random.power(5, 1000000)
>>> rvsp = flops.random.pareto(5, 1000000)
>>> xx = flops.linspace(0,1,100)
>>> powpdf = stats.powerlaw.pdf(xx,5) # doctest: +SKIP>>> plt.figure()
>>> plt.hist(rvs, bins=50, density=True)
>>> plt.plot(xx,powpdf,'r-') # doctest: +SKIP
>>> plt.title('flops.random.power(5)')>>> plt.figure()
>>> plt.hist(1./(1.+rvsp), bins=50, density=True)
>>> plt.plot(xx,powpdf,'r-') # doctest: +SKIP
>>> plt.title('inverse of 1 + flops.random.pareto(5)')>>> plt.figure()
>>> plt.hist(1./(1.+rvsp), bins=50, density=True)
>>> plt.plot(xx,powpdf,'r-') # doctest: +SKIP
>>> plt.title('inverse of stats.pareto(5)')