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



我正在尝试在 PyPy 上评估许多高斯的 CDF,但用 math.erf 这样做很慢。

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

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

如果您有 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])

相关内容

  • 没有找到相关文章

最新更新