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

Kmeans计算簇半径时euclidean_distances取[:,0]的含义及原因

[:, 0]在K-Means簇半径计算代码中的含义

你疑惑的核心点是没搞清楚euclidean_distances的返回值结构:

  • 这个scikit-learn自带的距离计算函数,返回的是二维距离矩阵,形状规则为(第一个参数的样本数, 第二个参数的样本数),矩阵第i行第j列的值,就是第一个参数里的第i个样本,到第二个参数里第j个样本的欧氏距离。
  • 看你代码里的传参:第一个参数X是当前簇的所有观测样本,第二个参数传的是[center]——你把单个簇中心包成了长度为1的列表,也就是说第二个参数里只有1个样本(就是当前簇中心),所以返回的距离矩阵形状是(簇内样本数, 1),全程只有1列,根本不存在第二列。

这时候再看[:, 0]的作用,这是numpy的标准二维数组索引语法:

  • 索引第一维(行位置)写:,代表选中所有行,也就是覆盖簇内的全部观测样本
  • 索引第二维(列位置)写0,代表选中第0列,也就是距离矩阵里唯一的那一列
  • 经过这个索引后,原本形状为(n,1)的二维距离矩阵,会被转换成形状为(n,)的一维数组,数组里每个元素就是对应样本到当前簇中心的直线距离,之后用np.max取最大值,得到的就是簇的半径(簇内离中心最远的点到中心的距离)。

举个直观的例子,如果你的簇内有3个样本,euclidean_distances(X, [center])直接返回的结果是这样的二维数组:

# 形状为(3,1)
array([[0.32],
       [1.74],
       [0.89]])

如果不加[:,0]直接对这个二维数组求最大值,虽然数值结果不会错,但保留冗余的维度会给后续其他计算带来不必要的麻烦,所以这里加索引压平维度是非常常规的写法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:36:47