如何在numpy数组中查找值的簇

时间:2014-09-08 16:39:20

标签: python arrays numpy cluster-analysis geospatial

我有一个气压数据阵列(M x N)(网格化模型数据)。对于纬度和经度,还有两个阵列(也是M×N)。为了构建等压线的GeoJSON(压力相等的表面),我需要找到给定步长(1 Pa,0.5 Pa)的压力值簇。总的来说,我正在考虑解决这个问题:

  1. 建立一个对象列表:[{lat,lon,pressure},..]以保持lat和lon数据与压力相关联;
  2. 按压力排序对象;
  3. 对于列表中的每个对象:比较其压力值并移至专用列表;
  4. 创建GeoJSON功能。
  5. 但是第3步还不清楚:如何以智能方式找到集群?我应该寻找哪种算法?我可以用scipy.cluster包吗?

1 个答案:

答案 0 :(得分:1)

我根本不认为你正在寻找集群。

显然给出了等压线范围。因此,将数据集拆分为它们;您不需要对此进行排序 - 只需找到获取所有存储桶的最小值和最大值,然后分别根据每个存储桶选择数据。这可以很好地将问题分解成更小的块。

我猜你的问题主要是可视化问题。你想显示类似压力的区域而不是积分,对吗?

不要查看需要预先定义参数k的统计方法,如最小二乘优化(k-means),而应考虑查看可视化技术,例如Alpha Shapes(与凸包密切相关,但它们也允许非凸形状)。如果为每个压力域计算alpha形状,则应该可以很好地显示这些区域。

如果您坚持使用群集,请查看DBSCAN。主要是因为它允许非凸形状的簇,并且它可以与纬度+经度一起工作(k-means不会)。但即使是HAC也可以为您提供良好的结果,因为您可以根据您的数据分辨率定义切割阈值(例如,合并任何点 - 在相同的压力桶中 - 如果它们相距不到1公里)。