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