Python:对于每次迭代,系统状态都会发生变化

标签 python algorithm classification postgis

这是我的用例——它与小社区分类有关,但它可以是在循环期间地面条件发生变化(各个区域的状态/分组发生变化)并且进一步迭代必须与系统的状态。

这个问题在这一点上比代码更概念化,所以请耐心等待我没有可重现的例子。

我正在遍历一个小区域列表。我在 postgis 中运行空间查询以获取所有邻近区域的列表。

每个区域都可以被认为是一个集群的地理“种子”:如果每个种子的邻居都满足特定的大小标准,它们就会被添加到列表中(集群“增长”)并分配一个集群 ID。

编辑:添加细节

我的起点是 postgis 中的人口普查区图层,我在其中查询相邻区域。比如说,区域 1 的相邻区域有 2、3、5 和 6。 这些区域有很多属性,例如就业和人口。因此,这里的想法是将区域 1 视为潜在的地理聚类种子,并且对于每个邻居,如果它们满足特定数据条件(可能是人口规模),则添加它们。在示例中,假设我们添加区域 2 和 3,但不添加区域 5 和 6(它们的人口可能太少)。

种子 1 现在已经长大,有两个额外的区域。然后我将合并这些,拥有更大的区域并查询原始区域层以查找现在更大种子的邻居。重复直到没有邻居符合标准,然后移动到原始列表中的下一个区域。

这是我在这个概念上遇到问题的地方:

  • 我穿过一个种子区域并枚举它的所有邻居,在每次迭代结束时,我想反射(reflect)出现在可能有一个更大的种子,并且种子将有一个新的潜在邻居列表,它可以“吸收”。

所以在某种意义上,我想在原始列表上运行一个循环,但是每次我用完种子X的邻居列表时都会修改并重新查询。下一次迭代,然后将面临一个新的状态地理系统。

我可以以线性方式执行此操作,重复代码块,但这并不理想。或者迭代可能不是一个好主意——“遍历”一个列表然后执行

所以归结为一个问题,我如何设置状态变化的迭代,这与典型的 list comprehensions 不同。是基于某些初始状态标准从一开始就完全列举选项的那种,并且后续测试是否反射(reflect)了(地理)系统的新状态?

最佳答案

问题似乎出在您对“迭代”的定义中。一个类似的例子是元胞自动机的计算,其中世界更新是离散且完整的。一种标准方法是拥有一个“下一次迭代”世界 W_next,它是从世界 W 的“现在”状态创建的。这与您的示例阐述的单世界方法完全不同。

在伪代码中,正确的方法是:

W = starting_world()
W_next = some_function_on(W)
W = W_next

这样做的好处是,在分析整个世界 W 之前,不会将区域标记为聚类。更明确地说,使用您的示例,在第一次迭代中,单元格 (1, 2, 3) 将被聚类,并且可能 (5, 6) 已与 (9) 一起放置或未放置。

如果您的聚类规则是一致的,那么在第二次迭代中,您已经有了聚类 (1, 2, 3),然后您可以决定是否将 5、6 或不添加到该聚类。

关于Python:对于每次迭代,系统状态都会发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28652489/

相关文章:

python - 如何在 python 中的二维数组中加速二维数组?

machine-learning - 为什么 imagenet 数据集标签存在差异?

algorithm - Minimax 算法未按预期工作

r - "RTextTools"create_matrix 出错

python - 区分文档的图像和另一个图像

javascript - Linux 上的 Python 和 Spidermonkey Javascript 引擎

python - 从头开始重新安装 OpenCV

python - Python制作热图所需的数据结构

algorithm - 最小化一对一分配问题中的最大成本

algorithm - 合并图像中的一组矩形的最佳方法是什么?