2016-06-08 28 views
1

现在我有一个图像处理算法,大约100 Python左右。使用numpy,PILscipy大约需要500ms。我期望更快地获得它,而且由于实际的算法看起来非常优化,所以我想知道是否使用不同的方法(如Cython)会改善时间。我相信,我有几个不同的事情,我可以这样做:Cython之间的区别,扩展C/C++与Python.h等

  1. 使用用Cython揭露C库到Python的相关部分。
  2. 使用ctypes的只是用C编写的一切,但仍然有它纯Python(不计入这在所有的倾斜)
  3. 在C/C创建一个扩展模块 ++,并将其导入并调用的函数。我不确定我是否能够以这种方式使用numpy
  4. 创建一个DLL并让Python加载它。这没有得到使用numpy或这些模块,但仍然是非常有效的。

我只是在这里寻找速度,并不担心执行的难度。在这种情况下,有没有更好的选择,它们都是一样的,还是值得做的?

回答

1

它有助于了解你需要在这里做什么。

如果你不使用​​进行函数调用,它不太可能为你节省任何东西,只需要涉及​​类型。如果你已经有一些DLL用“为我解决”功能,那么确定,它就是​​。

Cython创建扩展模块,所以您可以使用扩展模块完成任何您可以使用的扩展模块,这取决于您手动编写扩展的感觉如何。 Cython比手写扩展更有限,很难“看到”性能(优化Cython的规则基本上与优化CPython代码相反,如果忘记cdef正确的东西,你什么也得不到),但是Cython通常也比较简单。

编写一个单独的非扩展DLL只有在非Python用途时才值得;否则,Python扩展基本上只是DLL的情况,但更好的集成。

基本上,根据定义,具有无限的时间和技能,CPython扩展将在性能上击败任何其他选项,因为它可以完成其他人的所有工作,等等。这只是更多的工作,并容易犯错误(因为你写C,这是容易出错)。

相关问题