Re: random numbers according to user defined distribution ??
- From: Steven D'Aprano <steve@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: 07 Aug 2008 01:26:54 GMT
On Wed, 06 Aug 2008 15:02:37 -0700, Alex wrote:
Hi everybody,
I wonder if it is possible in python to produce random numbers according
to a user defined distribution? Unfortunately the random module does not
contain the distribution I need :-(
This is a strange question. Of course you can -- just write a function to
do so! Here's some easy ones to get you started:
from __future__ import division
import random, maths
def unbounded_rand(p=0.5):
"""Return a random integer between 0 and infinity."""
if not (0 < p <= 1):
raise ValueError
n = 0
while random.random() < p:
n += 1
return n
def pseudonorm():
"""Return a random float with a pseudo-normal distribution.
The probability distribution is centered at 0 and bounded
by -1 and +1.
"""
return (sum([random.random() for i in range(6)])-3)/3
def triangular(min=0, max=1, mode=0.5):
"""Return a random float in the range (min, max) inclusive
with a triangular histogram, and the peak at mode.
"""
u = random.random()
if u <= (mode-min)/(max-min):
return min + math.sqrt(u*(max-min)*(mode-min))
else:
return max - math.sqrt((1-u)*(max-min)*(max-mode))
def linear():
"""Return a random float with probability density
function pdf(x)=2x.
"""
return math.sqrt(random.random())
There's no general way to create a random function for an arbitrary
distribution. I don't think there's a general way to *describe* an
arbitrary random distribution. However, there are some mathematical
techniques you can use to generate many different distributions. Google
on "transformation method" and "rejection method".
If you have a specific distribution you are interested in, and you need
some help, please ask.
--
Steven
.
- Follow-Ups:
- Re: random numbers according to user defined distribution ??
- From: Dan Bishop
- Re: random numbers according to user defined distribution ??
- References:
- Prev by Date: Re: os.system question
- Next by Date: Re: benchmark
- Previous by thread: Re: random numbers according to user defined distribution ??
- Next by thread: Re: random numbers according to user defined distribution ??
- Index(es):
Relevant Pages
|