python - 如何使用 pybrain 等外部 python 库在 cython 中编译我的 python 代码

标签 python python-2.7 cython pybrain cythonize

我需要更高的性能来运行我的神经网络,所以我认为用 cython 构建它是个好主意。我正在这样构建我的代码:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("my_code.pyx")
)

但是它会构建我使用的外部 python 文件吗?就我而言,就像 pybrain、skimage 和 PIL。 如果没有,如何强制 cython 构建它们。

最佳答案

不,外部 python 文件不会被 cythonized 和编译,除非你专门将它们作为扩展添加到你的 setup.py 中。据我所知,没有简单的方法可以做到这一点。

这意味着所有对外部文件的调用都将在“Python 空间”中处理,因此无法充分发挥 Cython 的潜力。例如,所有对外部文件的调用都将进行类型检查,这会浪费很多时间。如果您使用 cython -a yourfile.pyx 对文件进行 cython 化并查看创建的 C 代码,则可以看到这一点。黄色越多,您的代码就越python

您有以下选择:

  1. 查找提供 Cython 或 C 级访问权限的库/包。不幸的是,您使用 Cython 找到好的(或根本没有)的机会很低,并且为 C 库构建包装器需要大量工作。请注意,本身用 C 实现的包(例如 numpy)已经相当快了。我不知道这对您的相关包裹有何影响。 pybrains 乍一看似乎是纯 python。
  2. 获取您要使用的包的源代码,并使用 Cython 自行编译它们。这可能需要大量工作,不值得花时间。
  3. 使用像 lineprofiler / kernprof 这样的分析器找到瓶颈(这应该始终是优化的第一步)并尝试仅对运行时瓶颈进行 cythonize。

我个人会选择选项 3,因为选项 1 和 2 都可能需要您这边做大量工作,结果有问题。

关于python - 如何使用 pybrain 等外部 python 库在 cython 中编译我的 python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38248017/

相关文章:

python - Python 中检查 unicode 是数字还是小数的有效方法

python - 出现错误 :Input contains NaN, 无穷大或值对于 dtype ('float64' 来说太大)

python - 如何对 Pandas 数据透视表中的值进行排序?

python - Python 描述符中实例和所有者的用途是什么?

python - Pandas 旋转数据框和多列 bool 比较

python - pip install/tmp/pip-c436mD-unpack/master 成员 espeed-bulbs-71d0cce/docs/social 无效 :

python - 根据行索引、列引用遍历 df 列并返回数据框中的值

cython - 当扩展模块被垃圾收集时运行 cython 代码

python - 来自 Cython 中动态数组的 2D MemoryView

python - 声明 cpdef 枚举时出现此 Cython 编译错误的原因是什么?