Python:帮助优化代码

标签 python optimization

我有一段代码用于计算矩形网格中的单元中心。网格尺寸相当大(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/

相关文章:

python - 如何快速比较两个文件?

python - ffmpeg - 在内存而不是磁盘中输出图像

java - 如何在不循环的情况下将 Java 中的结果集拆分为 block (每个 block 500 行)?

c++ - 如何避免在程序启动时重新加载大数据

html - 针对搜索引擎优化网站

Python Pandas : creating condensed dataframe

python - 创建一个基于 Python 中的另一列递增的列

python - 如何确保 Spyder 在 conda 环境中运行?

performance - 为什么要创建 DLL 而不是将所有内容编译成一个大的可执行文件?

插入文件时,MySQL 查询速度变慢