【问题标题】:How to find clusters of values in numpy array如何在numpy数组中查找值簇
【发布时间】:2014-11-01 22:55:32
【问题描述】:

我有一个气压数据数组(M x N)(网格模型数据)。还有两个用于纬度和经度的数组(也是 M x N)。要构建等压线(等压表面)的 GeoJSON,我需要找到给定步长(1 Pa,0.5 Pa)的压力值集群。一般来说,我想这样解决它:

  1. 构建对象列表:[{ lat, lon, pressure },..] 以保持 lat 和 lon 数据与压力相关联;
  2. 按压力排序对象;
  3. 对于列表中的每个对象:比较其压力值并移至专用列表;
  4. 创建 GeoJSON 特征。

但我还不清楚第 3 步:如何以智能的方式找到集群?我应该寻找哪种算法?我可以用 scipy.cluster 包做到这一点吗?

【问题讨论】:

  • 您的等压线网格范围是否固定?然后就像isobar_bucket_no = trunc(pressure / 0.5) 一样简单,其中0.5 是您的网格步骤。你甚至不需要排序。如果需要动态计算范围,找到最小和最大压力,然后找到合适的网格步长,使等压线的数量合理。

标签: python arrays numpy cluster-analysis geospatial


【解决方案1】:

我认为您根本不是在寻找集群。

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

我猜你的问题主要是一个可视化问题。您想显示压力相似的区域而不是点,对吧?

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

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

【讨论】:

  • 谢谢,我明白了。你是对的:它更多的是关于可视化,那是我的错。但看起来凹壳可以解决我的问题,所以我将继续这个方向。
猜你喜欢
  • 2014-10-29
  • 1970-01-01
  • 2020-05-02
  • 2020-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-02-04
  • 1970-01-01
  • 2019-02-06
相关资源
最近更新 更多