我想加快我的代碼,目前需要一個多小時才能在Python/Numpy中運行。大部分計算時間出現在粘貼在下面的函數中。向Python化/ Numpy中的循環向量化可能嗎?
我想向量化Z,但是我發現它對於三重循環很難。我能否在某處實施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 = 75
xdim = 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:])'而不是你的三元組。 – halex
不相關,但很重要:您可能想重新檢查使用'global'關鍵字。你的情況沒用。 – Simon