1
我想使用weave.blitz改善以下numpy的代碼的性能:閃電代碼產生不同的輸出
def fastIteration(self):
g = self.grid
nx,ny = g.ux.shape
uxold = g.old_ux
ux = g.ux
ux[0:,1:-1] = uxold[0:,1:-1] + ReI* (uxold[0:,2:] - 2*uxold[0:,1:-1] + uxold[0:,0:-2])
g.setBC()
g.old_ux = ux.copy()
在此代碼g是計算網格。它由兩個不同的領域ux和uxold組成。舊的只是用於臨時存儲變量。在完整的代碼中,大約95%的運行時間用於fastIteration方法,因此即使簡單的性能增益也會顯着減少執行此代碼的時間。
的numpy的方法的輸出看起來好像:
由於這個代碼是我的瓶頸,我想用編織熱捧提高速度。這種方法看起來像:
def blitzIteration(self):
### does not work correct so far
g = self.grid
nx,ny = g.ux.shape
uxold = g.old_ux
ux = g.ux
expr = "ux[0:,1:-1] = uxold[0:,1:-1] + ReI* (uxold[0:,2:] - 2*uxold[0:,1:-1] + uxold[0:,0:-2])"
weave.blitz(expr, check_size=0)
g.setBC()
g.old_ux = ux.copy()
然而,這並不產生正確的輸出:(fixed轉載,提交併有一個關於實際錯誤的詳細信息那裏)
@jordeca:這裏是: '$蟒蛇blitz_bug.py' '$蟒蛇-c 「進口SciPy的;打印SciPy的.__版本__」' 0.13.0.dev-639ef30 '$蟒蛇 - c「import numpy; print numpy .__ version __」' 1.7.1 '$ uname -a' Linux ratatoskr 2.6.32-45-generic#104-Ubuntu SMP Tue Feb 19 21:20:09 UTC 2013 x86_64 GNU/Linux – 2013-04-26 21:58:43
@ Zhenya謝謝! – jorgeca 2013-04-27 14:13:22