我想使用 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。old 仅用于临时存储变量。在完整的代码中,大约 95% 的运行时间花费在 fastIteration 方法上,因此即使是简单的性能提升也会显着减少执行此代码所花费的时间。
numpy 方法的输出看起来像:
由于这段代码是我的瓶颈,我想通过使用 weave blitz 来提高速度。这个方法看起来像:
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()
但是,这不会产生正确的输出: