2016-05-10 26 views
-4

我有一个关于我的python程序性能的问题。写下来的部分非常重要,我已经用numpy增加了性能。我想知道是否有可能让这部分更快? 10倍的速度可达应该已经不错..Python性能

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) 
+4

你能告诉我们关于这段代码的任何事吗?你在哪里运行它,它做什么,你有什么样的输入数据... – TigerhawkT3

+1

我会建议[codereview.se] – zondo

+5

我投票结束这个问题作为题外话,因为它属于[codereview .SE。有关优化已运行代码的问题与Stack Overflow无关。 – MattDMo

回答

0

我做了一个很好的与Cython(另一件事比CPython ...)。您可以将代码从您的程序中清除出去,将其编译为扩展名,然后从另一个Python文件运行它。关于构建扩展的更多信息,请参阅此问题,其中包括numpyHow to create a .pyd file?

样品:

假设你有你的代码编译为一个扩展(.pyd在Windows上,.so上所有其他平台),例如myext.pyd并在它的功能myfunc(),你可以像这样运行:

import myext 
myext.myfunc() 

Python解释器将运行这个小的代码片段,加载扩展(这是字节码从C -code制成,将要快!)并且比普通的Python代码更快地运行任何函数。

您将需要在Windows上安装编译器,大多数Linux/Unix系统中已经包含gcc。 Python 2.7有一个特殊的Compiler包,但是这对Python 3.x不起作用。您可以在Windows上使用MinGW,该端口的gcc适合我。

有时Cython将产生约300行Python代码15000行的C代码,不知道有关:)

随意问,如果你有更多的问题或需要更详细的说明怎么办那。建立一个工作 Python的扩展不是那么平凡......

希望这有助于!

+0

我做了一些编辑,可能是有用的信息 – linusg