Python 2.7:迭代流积累数组

时间:2016-11-17 13:22:44

标签: arrays performance python-2.7 numpy iteration

我发现了关于性能的不同主题,以计算其他水文输出的流量累积栅格。在我的情况下,我已经有一个流量累积栅格,它已被改为数组,以及一个基于该阵列的一维数组,其中'单元'的顺序已根据DEM(从高到低)排序。

这用于更大的模型来计算营养物质的运输(其中包括:侵蚀)。然后通过使用该1D阵列向河流细胞“运输”计算的侵蚀。我的问题是这个过程非常缓慢,我想知道是否有其他可能性加快这一进程。较大模型的整个计算时间取决于这个缓慢的过程。

背景信息:一切都是用Python 2.7编写的,计算机本身的性能不是问题(它是网络中的VPC,我写的所有其他东西都在可接受的时间内在同一个VPC上运行)。目的不是使用arcpy模块(其他任何东西都是受欢迎的)。目前它主要基于NumPy进行阵列计算(阵列是由原始栅格制作的速度)。

代码缓慢部分的主要结构如下。我猜它的速度很慢,因为它循环遍历数组中的每个单元格。它是一个大型阵列(大约800x1000),剪切是不可能的,只有在没有其它工作可以加速它的情况下才会考虑到更大的网格尺寸,考虑到输出变化的估计(更大的错误?)。

我的问题是:有没有什么方法可以让这个过程在计算中更快,除了削减区域或集中到更大的单元格?因此,我仍然可以追踪(累积)阵列上的所有沉积物(和营养物)朝向河流细胞。如果那是不可能的,那么我可以接受并努力改进这两个选项之一。

事先感谢您的时间和考虑。

亲切的问候,

罗布

for ii in range (rows.size-1,-1,-1):           
    rowNr=rows[ii] # retrieve row number of grid ll
    colNr=cols[ii] # retrieve column number of grid cell
        if(Riverheads[rowNr,colNr]==9999.):    
        # Transport sediment(kg cell-1) and nutrients (gr cell-1) to neigbour cells
        # to west cell
            if colNr-1>=0:
            #add inflow + nutrient loads from westcell
        # to east cell
            if colNr+1 <=cols.max():
            #add inflow + nutrient loads from eastcell
        # to south cell
            if rowNr+1<=rows.max():
            #add inflow + nutrient loads from southcell
        # to north cell
            if rowNr-1>=0:
            #add inflow + nutrient loads from northcell

0 个答案:

没有答案