You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中逐元素合并经纬度数组以实现K-means聚类求助

合并经纬度数组用于K-means聚类的正确姿势

你的核心思路没问题——把纬度和经度配对成坐标点数组,但原代码里初始化coordinates的方式踩了坑:np.array(385)只会创建一个值为385的单元素数组,根本装不下385个坐标对,直接赋值肯定会报错。

下面给你几种简洁高效的实现方式:

方法1:用np.column_stack直接合并(最推荐)

这个方法专门用来把一维数组按列合并成二维数组,完美适配你的需求:

import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 假设data是你的数据集
long = np.array(data.Longitude)
lat = np.array(data.Latitude)

# 直接合并成N×2的坐标数组,每一行是[纬度, 经度]
coordinates = np.column_stack((lat, long))

# 接下来运行K-means聚类(这里用sklearn的KMeans,也可以用你原来的kmeans2)
kmeans = KMeans(n_clusters=3, max_iter=20, random_state=42)
y = kmeans.fit_predict(coordinates)

# 可视化结果(注意经度放x轴、纬度放y轴更符合地图习惯)
plt.scatter(coordinates[:, 1], coordinates[:, 0], c=y)
plt.xlabel('Longitude')
plt.ylabel('Latitude')
plt.show()

方法2:用列表推导式构建后转数组

如果你习惯更直观的循环逻辑,也可以这样写,既贴合你原本的思路,又避免手动初始化数组的错误:

coordinates = np.array([[lat[i], long[i]] for i in range(len(lat))])

方法3:用np.vstack转置合并

另一种灵活的合并方式,先把两个一维数组垂直堆叠,再转置成二维数组:

coordinates = np.vstack((lat, long)).T

小提示

  • 如果你用的是scipy.cluster.vq里的kmeans2,记得先通过whiten()对数据做白化处理;但sklearn的KMeans会自动处理数据缩放,不需要额外操作
  • 可视化时把经度放在x轴、纬度放在y轴,展示的点会和实际地图位置对应,更直观

内容的提问来源于stack exchange,提问作者Pankaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 10:01:35