在处理“数组操作”(有时称为向量操作,但我发现该术语与 SIMD 术语混淆)时,还有 numpy 可以相当快。如果你决定走 cython 路线,你可能需要 numpy,所以如果算法不是太复杂,你可能想先看看 numpy 本身是否足够好。
请注意,您可以在这里选择两条不同的路线。您可以使用subprocess
它基本上向您编写的其他程序发出系统调用。这很慢,因为您需要启动一个新进程并将数据发送到进程中,然后从进程中读取数据。换句话说,每次调用都会多次复制数据。第二条路线是从 python 调用 C 函数。由于 Cpython(参考和最常见的 python 实现)是用 C 编写的,因此您可以创建 C 扩展。它们基本上是遵循特定 API 的编译库。然后 Cpython 可以加载这些库并使用里面的函数,传递指向数据的指针。通过这种方式,数据实际上并没有被复制——您在 python 中使用的内存块与在 C 中使用的内存块相同。这里的缺点是 C API 有点复杂。那' s 3rd 方扩展和现有库的来源(numpy、cython、ctypes 等)。它们都有不同的方式来推动计算 int C 函数,而您不必担心 C API。Numpy 删除了循环,因此您可以快速添加、减去、乘以数组(以及许多其他事情)。 Cython
将 python 代码转换为 C,然后您可以编译和导入 - 通常为了在这里获得速度,您需要提供额外的提示以允许 cython 优化生成的代码,ctypes
这有点脆弱,因为您必须重新指定您的 C 函数原型,但除此之外,只要您可以将库编译为共享对象,这很容易......这个列表可以继续。
另请注意,如果您不使用 numpy,则可能需要查看 pypy。它声称运行你的 python 代码比 Cpython 更快。