I've been using Numpy's numpy.random.exponential function for a while. I now see that Python's random module has many functions that I didn't know about. Does it have something that replaces numpy.random.exponential? It would be nice to drop the numpy requirement from my project.
 
    
    - 390,455
- 97
- 512
- 589
 
    
    - 84,019
- 84
- 236
- 374
2 Answers
If anything about random.expovariate() does not suit your needs, it's also easy to roll your own version:
def exponential(beta):
    return -beta * math.log(1.0 - random.random())
It seems a bit of an overkill to have a dependency on NumPy just for this functionality.
Note that this function accepts the mean beta as a parameter, as does the NumPy version, whereas the parameter lambd of random.expovariate() is the inverse of beta.
 
    
    - 574,206
- 118
- 941
- 841
http://docs.python.org/library/random.html#random.expovariate
random.expovariate(lambd)
Exponential distribution. lambd is 1.0 divided by the desired mean. It should be nonzero. (The parameter would be called “lambda”, but that is a reserved word in Python.) Returned values range from 0 to positive infinity if lambd is positive, and from negative infinity to 0 if lambd is negative.
 
    
    - 40,948
- 31
- 128
- 181