【发布时间】:2012-10-25 09:31:42
【问题描述】:
我正在尝试加快我的代码,目前在 Python / Numpy 中运行需要一个多小时。大部分计算时间发生在下面粘贴的函数中。
我正在尝试对 Z 进行矢量化,但我发现三重 for 循环相当困难。我可以在某处实现numpy.diff 函数吗?看看:
def MyFESolver(KK,D,r,Z):
global tdim
global xdim
global q1
global q2
for k in range(1,tdim):
for i in range(1,xdim-1):
for j in range (1,xdim-1):
Z[k,i,j]=Z[k-1,i,j]+r*q1*Z[k-1,i,j]*(KK-Z[k-1,i,j])+D*q2*(Z[k-1,i-1,j]-4*Z[k-1,i,j]+Z[k-1,i+1,j]+Z[k-1,i,j-1]+Z[k-1,i,j+1])
return Z
tdim = 75xdim = 25
【问题讨论】:
-
试试
Z[1:, 1:-1, 1:-1] = Z[:-1, 1:-1, 1:-1] + r*q1*Z[:-1, 1:-1, 1:-1]*(KK-Z[:-1, 1:-1, 1:-1]) + D*q2*(Z[:-1,:-2,1:-1] - 4*Z[:-1, 1:-1, 1:-1] + Z[:-1, 2:, 1:-1] + Z[:-1, 1:-1, :-2] + Z[:-1, 1:-1, 2:])这行,而不是你的三重行。 -
无关,但很重要:您可能需要重新检查
global关键字的使用。在你的情况下它是没用的。
标签: python numpy vectorization