如何在numpy数组中查找值的聚类

2 投票
1 回答
5250 浏览
提问于 2025-04-20 12:17

我有一个空气压力数据的数组(M x N),还有两个数组(也是 M x N)分别表示纬度和经度。为了制作等压线的 GeoJSON(表示相同压力的区域),我需要找到具有特定间隔(1 Pa,0.5 Pa)的压力值聚类。大致上,我的想法是这样解决这个问题:

  1. 首先,建立一个对象列表:[{ lat, lon, pressure },..],这样可以把纬度和经度与压力数据关联起来;
  2. 然后,根据压力对这些对象进行排序;
  3. 接下来,对于列表中的每个对象:比较它的压力值,并将其移动到一个专门的列表中;
  4. 最后,创建 GeoJSON 特征。

不过第三步我还不太明白:怎么才能聪明地找到这些聚类呢?我应该寻找什么样的算法?我能用 scipy.cluster 这个包来实现吗?

1 个回答

1

我觉得你其实并不需要用到聚类。

看起来你已经有了等压线的范围。所以可以根据这些范围来划分你的数据集;不需要对数据进行排序,只要找到最小值和最大值来确定所有的区间,然后根据每个区间分别选择数据。这样可以把问题分解成更小的部分,处理起来会简单很多。

我想你的问题主要是关于可视化的。你想显示的是类似压力的区域而不是单个点,对吧?

与其使用像最小二乘法(k-means)这样的统计方法,这些方法需要你提前定义一个参数k,不如考虑一些可视化技术,比如Alpha Shapes(与凸包相关,但也支持非凸形状)。如果你为每个压力区域计算Alpha Shapes,你应该能得到这些区域的不错可视化效果。

如果你坚持要用聚类,可以看看DBSCAN。主要是因为它可以处理非凸形状的聚类,并且可以与经纬度一起使用(而k-means不行)。不过即使是层次聚类(HAC)也可能给你带来不错的结果,因为你可以根据数据的分辨率来定义你的切割阈值(例如,如果同一压力区间内的点距离小于1公里,就合并它们)。

撰写回答