【发布时间】:2019-01-17 14:02:32
【问题描述】:
据我了解,向量化的 numpy 函数比 Python 循环更快,因为循环是在 C 或 Fortran 中完成的。我想知道这发生在源代码的什么地方。
例如,scipy.special.bdtr 二项式 CDF 函数接受类似数组的参数 k,n,p 并返回一个 ndarray,前提是这些参数是可广播的。文档说scipy.special.bdtr 是 Cephes 数学函数库中例程的包装器。在 Github 上挖掘源代码,我发现了一个 scipy/special/cephes/bdtr.c 文件,其中包含例程的 C 代码;以下是我认为是相关 C 函数的前三行:
双 bdtr(k, n, p)
int k, n;
双倍;
似乎底层的C函数不对数组进行操作,我找不到将这个函数转换为对数组进行操作的Python函数的源代码。
【问题讨论】:
-
“包装器”并不总是意味着“直接功能映射”;包装器代码本身可能会做一些额外的事情,例如您提到的循环(尽管
scipy前端不太可能被矢量化,因为 CMFL 的bdtr仅适用于 一个 参数集)。跨度>
标签: python c numpy scipy vectorization