Can you please tell me how to get the value of the Laplace function (standard normal distribution function) in python?
laplace.pdf () function from
scipy gives the wrong value. The values do not match the tabular values of the Laplace integral function:
Answer 1, authority 100%
Found: the values of the mentioned table are given by the function
scipy.stats.norm.cdf (x) - 0.5 . Only now, in my opinion, it has nothing to do with Laplace, because it is an integral of the usual Gaussian distribution.
Answer 2, authority 50%
Google suggests that math.erf (x)
Answer 3, authority 25%
This explains why you need to subtract 0.5. After all, the integral of the entire probability density is equal to one. And it is symmetrical. And the negative part is exactly 0.5.
You can also use erf. It is linked to cdf (see Wikipedia article ).
And this answer gave me the ability to speed up cdf even more than scipy.
In my project, I also hang up jit compilation. And it comes out twice as fast as
cdf. (Normal (0,1), x) on Julia. As a result, the speedup in comparison with scipy was 10 times.
My implementation is shown below. Unfortunately, it lacks input validation, so provide it yourself.
@ nb.njit (cache = True) def cdf (x): "" " Calculation of the Laplace function. Attention! Disabled border check "" " x = x / 1.414213562 a1 = 0.254829592 a2 = -0.284496736 a3 = 1.421413741 a4 = -1.453152027 a5 = 1.061405429 p = 0.3275911 s = np.sign (x) t = 1 / (1 + s * p * x) b = np.exp (-x * x) y = (s * s + s) / 2 - \ s * (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * b / 2 return y