dar*_*ace 4 python numpy compilation
试图了解python库是否已编译,因为我想知道我编写的解释代码是执行相同还是更差.
例如,我看到它在某处提到numpy和scipy是有效的,因为它们是编译的.我不认为这意味着字节码被编译,所以这是怎么做到的?它是用cython这样的东西编译成c的吗?或者它是使用像c这样的语言编写的,并以兼容的方式编译?
这是适用于所有模块还是根据具体情况而定?
NumPy和其他几个库是用C语言和其他语言(如FORTRAN)编写的代码的部分包装器,它们在编译时运行速度比Python快.这有助于避免Python中的循环,指针间接和每元素动态类型检查的成本.这个问题在这个问题中解释:
Numpy数组是密集的同类型数组.相比之下,Python列表是指向对象的指针数组,即使它们都属于同一类型.因此,您可以获得参考地点的好处.
此外,许多Numpy操作在C中实现,避免了Python中的循环,指针间接和每元素动态类型检查的一般成本.速度提升取决于您正在执行的操作,但在数字运算程序中,几个数量级并不罕见.
编译为字节码(.pyc文件)的Python代码是一个单独的主题,其中编译python脚本以提高启动性能(请参阅此问题).
Python 可以执行用 Python 编写的函数(解释型)和编译函数。有关于编写与 Python 集成的代码的完整 API 文档。 cython是执行此操作的更简单的工具之一。
库可以是任意组合 - 纯 Python、Python 加编译代码的接口,或者全部编译。解释后的文件以 结尾.py,编译后的文件通常是.so或.dll(取决于操作系统)。安装纯 Python 代码很容易 - 只需加载、解压(如果需要),然后放入正确的目录。混合代码需要编译步骤(因此需要 ac 编译器等),或者下载带有二进制文件的版本。
通常,开发人员让代码在 Python 中运行,然后在c. 或者他们找到一些外部工作库c或Fortran代码,并链接到它。
numpy并且scipy是混合的。它们有大量的 Python 代码、核心编译部分,并使用外部库。而且c代码可能非常难以阅读。
作为numpy用户,您应该首先尝试使用 Python 代码获得尽可能多的清晰度和性能。大多数优化 SO 问题讨论了使用编译功能的方法numpy- 对整个数组起作用的所有操作。只有当你无法用高效的 numpy 代码表达你的操作时,你才需要求助于使用像cythonor 这样的工具numba。
一般来说,如果您必须进行广泛的迭代,那么您正在使用低级操作。要么用数组操作替换循环,要么在 cython 中重写循环。
| 归档时间: |
|
| 查看次数: |
1537 次 |
| 最近记录: |