You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.3 KiB
Python
77 lines
2.3 KiB
Python
11 years ago
|
from __future__ import division, print_function, absolute_import
|
||
|
|
||
|
from numpy import vectorize, deprecate
|
||
|
from numpy.random import random_sample
|
||
|
|
||
|
__all__ = ['randwppf', 'randwcdf']
|
||
|
|
||
|
# XXX: Are these needed anymore?
|
||
|
|
||
|
#####################################
|
||
|
# General purpose continuous
|
||
|
######################################
|
||
|
|
||
|
|
||
|
@deprecate(message="Deprecated in scipy 0.14.0, use "
|
||
|
"distribution-specific rvs() method instead")
|
||
|
def randwppf(ppf, args=(), size=None):
|
||
|
"""
|
||
|
returns an array of randomly distributed integers of a distribution
|
||
|
whose percent point function (inverse of the CDF or quantile function)
|
||
|
is given.
|
||
|
|
||
|
args is a tuple of extra arguments to the ppf function (i.e. shape,
|
||
|
location, scale), and size is the size of the output. Note the ppf
|
||
|
function must accept an array of q values to compute over.
|
||
|
|
||
|
"""
|
||
|
U = random_sample(size=size)
|
||
|
return ppf(*(U,)+args)
|
||
|
|
||
|
|
||
|
@deprecate(message="Deprecated in scipy 0.14.0, use "
|
||
|
"distribution-specific rvs() method instead")
|
||
|
def randwcdf(cdf, mean=1.0, args=(), size=None):
|
||
|
"""
|
||
|
Returns an array of randomly distributed integers given a CDF.
|
||
|
|
||
|
Given a cumulative distribution function (CDF) returns an array of
|
||
|
randomly distributed integers that would satisfy the CDF.
|
||
|
|
||
|
Parameters
|
||
|
----------
|
||
|
cdf : function
|
||
|
CDF function that accepts a single value and `args`, and returns
|
||
|
an single value.
|
||
|
mean : float, optional
|
||
|
The mean of the distribution which helps the solver. Defaults
|
||
|
to 1.0.
|
||
|
args : tuple, optional
|
||
|
Extra arguments to the cdf function (i.e. shape, location, scale)
|
||
|
size : {int, None}, optional
|
||
|
Is the size of the output. If None, only 1 value will be returned.
|
||
|
|
||
|
Returns
|
||
|
-------
|
||
|
randwcdf : ndarray
|
||
|
Array of random numbers.
|
||
|
|
||
|
Notes
|
||
|
-----
|
||
|
Can use the ``scipy.stats.distributions.*.cdf`` functions for the
|
||
|
`cdf` parameter.
|
||
|
|
||
|
"""
|
||
|
import scipy.optimize as optimize
|
||
|
|
||
|
def _ppfopt(x, q, *nargs):
|
||
|
newargs = (x,)+nargs
|
||
|
return cdf(*newargs) - q
|
||
|
|
||
|
def _ppf(q, *nargs):
|
||
|
return optimize.fsolve(_ppfopt, mean, args=(q,)+nargs)
|
||
|
|
||
|
_vppf = vectorize(_ppf)
|
||
|
U = random_sample(size=size)
|
||
|
return _vppf(*(U,)+args)
|