现在我有一个用Python编写的图像处理算法,大约有100行左右。使用
numpy
、PIL
和 scipy
大约需要 500 毫秒。我希望更快地获得它,并且由于到目前为止实际算法似乎已经相当优化,我想知道使用不同的方法(例如 Cython
)是否会改善时间。我相信我可以做几件不同的事情:
numpy
。numpy
或那些模块,但仍然非常高效。我这里只是追求速度,并不担心实施的难度。在这种情况下有没有更好的选择,它们都是一样的,或者甚至值得做?
了解您需要在这里做什么会很有帮助。
如果您不使用
ctypes
进行函数调用,那么只涉及 ctypes
类型不太可能为您节省任何东西。如果您已经有一些带有“帮我解决”功能的 DLL/共享对象,那么当然,ctypes
就是这样。
Cython 创建扩展模块,因此您可以使用 Cython 执行的任何操作也可以使用扩展模块完成,这仅取决于您手动编写扩展的舒适程度。 Cython 比手动编写扩展受到更多限制,并且更难“看到”性能(优化 Cython 的规则基本上与优化标准 Python 级 CPython 代码相反,如果您忘记
cdef
正确的事情,您没有任何收获;cdef
错误的事情会让代码变慢),但 Cython 通常也更简单。
仅当您有非 Python 用途时才值得编写单独的非扩展 DLL;否则,Python 扩展基本上只是 DLL 的情况,但集成得更好。
基本上,根据定义,只要有无限的时间和技能,CPython 扩展将在性能上击败任何其他选项,因为它可以完成其他选项所做的一切,甚至更多。只是工作量更大,而且容易出错(因为你写的是 C,很容易出错)。