有人知道scipy.stats.norm.ppf()的另一种Python实现吗?我正在构建一个EXE,我希望避免为这个函数添加scipy。
这里有一个很好的scipy.stats.norm.pdf()的替代方法:Alternative for scipy.stats.norm.pdf?
有人知道scipy.stats.norm.ppf()的另一种Python实现吗?我正在构建一个EXE,我希望避免为这个函数添加scipy。
这里有一个很好的scipy.stats.norm.pdf()的替代方法:Alternative for scipy.stats.norm.pdf?
1条答案
按热度按时间hpxqektj1#
你可以安装
pyerf
模块,它是erf
和erfinv
函数的纯python实现,使用和scipy完全相同的公式。当然,它是另一个模块而不是scipy,但它是纯python的,所以依赖性没有问题,而且它更小,因为它只包含你需要的东西。
然后,从
erfinv
到norm.ppf
,这只是一个经典公式,在维基上,你可以看到x = cdf(y) = 0.5+0.5*erf(y/√2)
,所以从那里,你可以推导出x-0.5 = 0.5erf(y/√2)
⇒2x-1 = erf(y/√2)
⇒erfinv(2x-1) = y/√2
⇒y=√2×erfinv(2x-1)
所以
核查
没有派尔夫
这有点天真,但是如果性能不是问题,可以通过从math.erf进行二分法来计算erfinv(或者直接计算ppf,请参见下文
一个二个一个一个
直接多项式实现
或者您可以直接实现polynomial approximation of erfinv