2016-05-10 28 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