在PyPy上矢量化高斯CDF(或erf / erfc /等)的最快方法(即没有SciPy)

时间:2016-06-05 07:28:39

标签: python numpy gaussian pypy cdf

我试图在PyPy上评估很多高斯人的CDF,并且用math.erf做这件事的速度很慢。

我没有在PyPy上使用SciPy所以我无法使用它。但是,我有NumPy。

除了编写我自己的C扩展之外,我在PyPy 上执行此操作的最快方式是什么?

1 个答案:

答案 0 :(得分:1)

如果你有numpy,你可以将错误函数制作表格,插入(np.interp或自己滚动),然后使用numpy矢量化操作一次评估多个值。

粗略地说(这是在CPython上,我不确定np.interp是否在numpypy中工作),

>>> import math
>>> x = np.linspace(-3, 3, 101)    # example only, better use e.g. Chebyshev nodes
>>> y = [math.erf(_) for _ in x ]
>>> xval = [-0.1, 0.4, 0.9]
>>> np.interp(xval, x, y)
array([-0.11237943,  0.42808831,  0.79690821])