Yueyoum - 1 year ago 1054
Python Question

# How to calculate the inverse of the normal cumulative distribution function in python?

How do I calculate the inverse of the cumulative distribution function (CDF) of the normal distribution in Python?

Which library should I use? Possibly scipy?

NORMSINV (mentioned in a comment) is the inverse of the CDF of the standard normal distribution. Using `scipy`, you can compute this with the `ppf` method of the `scipy.stats.norm` object. The acronym `ppf` stands for percent point function, which is another name for the quantile function.

``````In [20]: from scipy.stats import norm

In [21]: norm.ppf(0.95)
Out[21]: 1.6448536269514722
``````

Check that it is the inverse of the CDF:

``````In [34]: norm.cdf(norm.ppf(0.95))
Out[34]: 0.94999999999999996
``````

By default, `norm.ppf` uses mean=0 and stddev=1, which is the "standard" normal distribution. You can use a different mean and standard deviation by specifying the `loc` and `scale` arguments, respectively.

``````In [35]: norm.ppf(0.95, loc=10, scale=2)
Out[35]: 13.289707253902945
``````

If you look at the source code for `scipy.stats.norm`, you'll find that the `ppf` method ultimately calls `scipy.special.ndtri`. So to compute the inverse of the CDF of the standard normal distribution, you could use that function directly:

``````In [43]: from scipy.special import ndtri

In [44]: ndtri(0.95)
Out[44]: 1.6448536269514722
``````
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download