Python 表现

Python performance

我对 python 程序的性能有疑问。写下来的部分非常重要,我已经用 numpy 提高了性能。我想知道是否有可能使这部分更快? 10 倍的速度已经很好了..

u = numpy.zeros((a**l, a**l))
re = numpy.zeros((a**l, a**l, a**l))
wp = numpy.zeros((a**l, 2))
...Some code which edits u,re and wp...
for x in range(N):
    wavg = numpy.dot(wp[:, 0], wp[:, 1])
    wp[:, 0] = 1.0/wavg*numpy.dot(u, numpy.multiply(wp[:, 0], wp[:, 1]))
    wp[:, 0] = numpy.tensordot(numpy.tensordot(re, wp[:, 0], axes=1), wp[:, 0], 
    axes=1)

我在 Cython 方面获得了很好的体验(不同于 CPython...)。您可以从您的程序中制作纯 C 代码,将其编译为扩展,然后仅 运行 来自另一个 Python 文件。有关构建扩展的更多信息,请参阅我的这个问题,包括 numpy

样本:

假设您将代码编译为扩展(Windows 上的 .pyd,所有其他平台上的 .so),例如myext.pyd 和其中的一个函数 myfunc(),你可以 运行 像这样:

import myext
myext.myfunc()

Python 解释器将 运行 这个小代码片段,加载扩展(由 C 代码生成的字节码,会很快!)和 运行 任何功能都比普通 Python 代码快得多。

您需要在 Windows 上安装编译器,gcc 已包含在大多数 Linux/Unix 系统中。 Python 2.7 有一个特殊的编译器包,但它不适用于 Python 3.x。您可以在 Windows 上使用 MinGW,这是 gcc 的一个端口,对我来说效果很好。

有时 Cython 会从大约 300 行代码生成 15k 行 C 代码 Python 代码,不要对此感到奇怪:)

如果您有更多问题或需要更详细的说明如何操作,请随时询问。构建一个 working Python 扩展并不是那么简单...

希望对您有所帮助!