我有一段代码用于计算矩形网格中的单元中心。网格尺寸相当大(650 列 x 1150 行)。代码运行速度非常慢。我想知道是否可以采用任何技巧来减少运行时间。在下面的示例中,deltax 是列间距的一维数组,deltay 是行间距的一维数组。
center_x = np.empty((nrow,ncol),dtype ='double')
center_y = np.empty((nrow,ncol),dtype ='double')
for i in range(nrow-1,-1,-1):
if(i == nrow-1):
center_y[i,:] = 0.5*deltay[nrow-1]
else:
center_y[i,:] = center_y[i+1,:] + 0.5*deltay[i+1] + 0.5*deltay[i]
for j in range(0,ncol):
if(j ==0):
center_x[:,j] = 0.5*deltax[0]
else:
center_x[:,j]= center_x[0,j-1] + 0.5*deltax[j-1] + 0.5*deltax[j]
最佳答案
至少有两件事:
for i in range(nrow-1,-1,-1):
if(i == nrow-1):
center_y[i,:] = 0.5*deltay[nrow-1]
else:
center_y[i,:] = center_y[i+1,:] + 0.5*deltay[i+1] + 0.5*deltay[i]
可以更改以避免分支:
center_y[nrow-1,:] = 0.5*deltay[nrow-1]
for i in range(nrow-2,-1,-1):
center_y[i,:] = center_y[i+1,:] + 0.5*deltay[i+1] + 0.5*deltay[i]
这更多地利用了 numpy:
center_y[nrow-1,:] = 0.5*deltay[nrow-1]
center_y[:nrow-1, :] = 0.5*deltay[1:] + 0.5*deltay[:nrow-1]
# expl: deltay[i+1] in the loop skips the first element, deltay[i] skips the last element
for i in range(nrow-2,-1,-1): # can't move this part since center_y[i,:] depends on center_y[i+1,:]
center_y[i,:] = center_y[i+1,:]
关于Python:帮助优化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24701882/