Python性能

Python性能,python,performance,numpy,numba,Python,Performance,Numpy,Numba,我有一个关于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(

我有一个关于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
)的更多信息,请参见我的这个问题:

样本:

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

import myext
myext.myfunc()
Python解释器将运行这个小代码段,加载扩展(这是由
C
-code生成的字节码,速度很快!),并运行任何函数,速度都比普通Python代码快得多

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

有时候,
Cython
会从大约300行Python代码中生成15k行C代码,这一点也不奇怪:)

如果您还有其他问题或需要更详细的说明,请随时提问。构建一个工作的Python扩展并不是那么简单


希望这有帮助

你能告诉我们关于这个代码的情况吗?你在哪里运行它,它做什么,你有什么样的输入数据…我建议我投票结束这个问题,因为它属于主题。关于优化已经运行的代码的问题在堆栈溢出上是离题的。u是变异矩阵。re是复合张量。wp[:,0]是当前总体向量,wp[:,1]是适应度向量。a总是2,l通常是8。你试过Cython吗?我做了一些编辑,可能是有用的信息