我有一个程序,用来计算矩形网格中的单元中心。网格大小相当大(650列乘1150行)。代码运行得非常慢。我想知道是否可以使用任何技巧来减少下面的示例runtime.In,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]发布于 2014-07-11 16:42:34
至少有两件事:
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,:] 发布于 2014-07-11 16:22:17
center_x[:,j]= center_x[0,j-1] + 0.5*deltax[j-1] + 0.5*deltax[j]
...
center_y[i,:] = center_y[i+1,:] + 0.5*deltay[i+1] + 0.5*deltay[i]你必须分配给[:,j]和[i,:],而不仅仅是[i]和[j]吗?这类似于(但并不是因为有多个维度),而是将其提高到O(n^2)。
https://stackoverflow.com/questions/24701882
复制相似问题