[SciPy-User] [SciPy-user] support for truncated normal distribution
Wes McKinney
wesmckinn@gmail....
Tue Mar 15 14:03:23 CDT 2011
On Tue, Mar 15, 2011 at 2:58 PM, Robert Kern <robert.kern@gmail.com> wrote:
> On Tue, Mar 15, 2011 at 13:45, Dr. Phillip M. Feldman
> <pfeldman@verizon.net> wrote:
>>
>> I've noticed that there is no truncated normal distribution in NumPy, at
>> least according to the following source:
>>
>> http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.mtrand.RandomState.html,
>>
>> I've written code to generate random deviates from a truncated normal
>> distribution via acceptance-rejection, but this is inefficient when the
>> acceptance probability is low. I assume that NumPy is generating standard
>> normal deviates via the Ziggurat algorithm. That algorithm can be modified
>> to produce random deviates from a truncated normal without the use of
>> acceptance-rejection. I'd be very grateful if someone can implement this.
>
> No, we use the Box-Mueller transform, which is not easily truncated.
>
> --
> Robert Kern
>
> "I have come to believe that the whole world is an enigma, a harmless
> enigma that is made terrible by our own mad attempt to interpret it as
> though it had an underlying truth."
> -- Umberto Eco
> _______________________________________________
> SciPy-User mailing list
> SciPy-User@scipy.org
> http://mail.scipy.org/mailman/listinfo/scipy-user
>
I have an implementation here (using the inverse CDF method):
https://github.com/wesm/statlib/blob/master/statlib/distributions.py#L12
There is also scipy.stats.truncnorm (which I have not tested but assume works):
Notes
-----
Truncated Normal distribution.
The standard form of this distribution is a standard normal
truncated to the
range [a,b] --- notice that a and b are defined over the domain
of the standard normal. To convert clip values for a specific mean and
standard deviation use a,b = (myclip_a-my_mean)/my_std,
(myclip_b-my_mean)/my_std
More information about the SciPy-User
mailing list