这是我的用例 - 它与小邻域分类有关,但它可能是在循环期间地面条件发生变化(各个区域的状态/分组发生变化)的任何事情,并且进一步的迭代必须与系统的新状态。
这个问题在这一点上比代码更具概念性,所以请耐心等待,因为没有可重复的例子。
我正在循环一小块区域。我在postgis
中运行空间查询以获取所有相邻区域的列表。
每个区域都可以被视为群集的地理“种子”:如果每个种子的邻居满足特定大小标准,则将它们添加到列表中(群集“增长”)并分配群集ID。
修改:添加了详细信息
我的出发点是postgis中的人口普查区域,我查询相邻的区域。比方说,第1道有其邻居的第2,3,5和6栏。 这些小册子有许多属性,如就业和人口。因此,这里的想法是将第1道作为潜在的地理集群种子,并且,对于每个邻居,如果它们满足某些数据条件,则可以添加它们,可以是人口的大小。在这个例子中,假设我们添加了第2和第3,但没有第5和第6(它们的数量可能太小)。
种子1现在已经生长,还有两个小片。然后,我将联合这些,拥有更大的区域并查询原始的道路图层,用于现在更大的种子的邻居。重复直到没有符合标准的neigbors,然后移动到原始列表中的下一个区域。
这就是我遇到这个概念的问题:
所以从某种意义上说,我想在原始列表上运行一个循环,但每当我耗尽种子X的邻居列表时,它都会被修改和重新查询。下一次迭代,然后将面临一个新的状态地理系统。
我可以以线性方式执行此操作,重复代码块,但这并不理想。或许迭代是一个坏主意 - “走”列表,然后做
因此,将其归结为一个问题,如何设置状态更改的迭代,这与排序的典型list comprehensions不同,其中选项从一开始就根据一些初始状态标准完全枚举,后续测试是否反映了(地理)系统的新状态?
答案 0 :(得分:1)
问题似乎出现在“迭代”的定义中。类似的例子是细胞自动机的计算,其中世界更新是离散的和完整的。对此的标准方法是具有“下一次迭代”世界W_next,该世界是从世界W的“现在”状态创建的。这与您的示例阐述的单一世界方法完全不同。
在伪代码中,正确的方法是:
W = starting_world()
W_next = some_function_on(W)
W = W_next
这样做的好处是在分析整个世界W之前不将集群标记为集群。更明确地说,使用您的示例,在迭代1中,单元格(1,2,3)将被聚类,并且可能(5,6)已放置(9)或不放置。
如果您的群集规则是一致的,那么在迭代2中,您已经拥有了群集(1,2,3),然后您可以决定是否将5,6或者没有添加到该群集。