The probability density function of the normal distribution expressed in Python is
from math import pi
from math import exp
from scipy import stats
def normal_pdf(x, mu, sigma):
return 1.0 / (sigma * (2.0 * pi)**(1/2)) * exp(-1.0 * (x - mu)**2 / (2.0 * (sigma**2)))
(compare that to the wikipedia definition). And this is exactly what scipy.stats.norm().pdf()
computes: the value of the pdf at point x
for a given mu, sigma
.
Note that this is not a probability (= area under the pdf) but rather the value of the pdf at the point x
you pass to pdf(x)
(and that value can very well be greater than 1.0
!). You can see that, for example, for N(0, 0.1)
at x = 0
:
val = stats.norm(0, 0.1).pdf(0)
print(val)
val = normal_pdf(0, 0, 0.1)
print(val)
which gives the output
3.98942280401
3.989422804014327
Not at all a probability = area under the curve!
Note that this doesn't contradict the statement that the probability of particular value like x = 0
is 0
because, formally, the area under the pdf for a point (i.e., an interval of length 0
) is zero (if f is a continuous function on [a, b] and F is its antiderivative on [a, b], then the definite integral of f over [a, b] = F(a) - F(b). Here, a = b = x
hence the value of the integral is F(x) - F(x) = 0
).