加快大型网格数据集的处理 - C ++

时间:2015-02-03 02:25:37

标签: c++ performance for-loop grid

我正在阅读一个大网格,使用两个嵌套循环 - 一个覆盖行,一个覆盖行。在两个嵌套的for循环中,我有这个代码:

for(int row=0; row<rows; row++)
{
    for(int col=0; col<cols; col++)
    {
        input = grid[row][col];    // reading in the initial elevation
        if(input != NODATA)
        {
            //perform some calculation
        }else{
            //skip calculation
            // approximately 10 calculated variables/values are set to no data
        }
    }
}

如果所有细胞都包含&#34;可操作的&#34;数据总是大于我的NODATA值(-9999),我访问它们的顺序并不一定重要,我想我可以将我的网格转换为线性向量,按正数递减到负值,使用单个for循环遍历向量,当我点击300,000个NODATA值中的第一个时,跳出循环。使用该方法会有更明显的处理时间减少吗?

我并不具备设置和运行此类实验的技能。我确信在一两年内我能做到。

编辑:我的网格单元中有多达30%可能具有NODATA值,尽管它的变化很大。通常我会在超过100万个网格单元的网格中读取,然后执行计算 - 每行1000个行/列,每个最多7-10,000个。

编辑:是否存在某种快速懒惰排序,我可以将所有高于特定阈值的所有内容抛向向量的一侧并低于另一侧的阈值?可能在复制到已知输入大小的另一个空向量时?就像填充第二个向量一样,所有东西都不是NODATA值从第一个位置开始,一切都来自第一个位置,并在程序退出时跟踪最后一个NODATA位置填充?然后我可以在那个位置结束单循环。

0 个答案:

没有答案