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 扩展并不是那么简单...
希望对您有所帮助!
我对 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 扩展并不是那么简单...
希望对您有所帮助!