曼哈顿距离与欧几里得距离:选型指南与实战对比
发布时间:2026/10/24 7:00:50 锦皓数字建站

曼哈顿距离与欧几里得距离——这对概念在我实际的项目里踩过的坑比想象中多得多。最近在做一个基于位置特征的相似度匹配系统数据点散布在高维特征空间里一开始无脑选了欧几里得距离结果召回结果差到怀疑人生。后来逐个排查才发现问题恰恰出在距离度量的选择上。这个经历让我意识到两种距离看起来只是公式差了一点点但背后的几何直觉、适用场景、对数据的敏感度都完全不同。这篇就系统梳理一下两者的差异、应用思路和实战中的坑给正在做机器学习、数据挖掘、路径规划或者图像处理的朋友一个参考。1. 两种距离的定义与直观理解1.1 从公式到直觉一维到n维先说最朴素的定义。假设有两个点在二维平面上表示为 P1(x1, y1) 和 P2(x2, y2)。欧几里得距离是我们从小到大最熟悉的那条直线距离公式是d_euclidean sqrt((x1 - x2)^2 (y1 - y2)^2)而曼哈顿距离也叫 L1 距离、街区距离计算方式则是d_manhattan |x1 - x2| |y1 - y2|两者推广到 n 维空间时形式也一脉相承欧几里得L2对所有维度上的差值平方求和再开根号曼哈顿L1对所有维度上的差值取绝对值直接求和很多人看一眼公式就觉得:不就是差一点点吗但实际差得远了。我举个例子点 A(1, 2) 到点 B(4, 6)欧几里得距离sqrt((4-1)^2 (6-2)^2) sqrt(9 16) 5曼哈顿距离|4-1| |6-2| 3 4 7数值差了 2但这只是最简单的例子。在高维空间、在稀疏特征下、在数据分布不均匀的场景里这两种距离给出的排序结果可能天差地别。后面我会慢慢拆。1.2 城市街区与乌鸦飞行两种生活化类比理解这两种距离最直观的方式就是类比。曼哈顿距离名字本身就取自纽约曼哈顿的街区布局——方方正正的棋盘式街道。你想从 A 点走到 B 点不能穿楼过墙只能沿着街道横平竖直地走最后走的实际路程就是曼哈顿距离。所以我经常叫它出租车距离导航软件里如果设定最短步行路径在理想街区网格下计算出来的就是它。欧几里得距离则是乌鸦距离——天空中没有建筑物阻挡乌鸦从 A 点直线飞到 B 点那就是欧几里得。凡是能用尺子直接量的物理空间中的直线距离基本都是它。为什么这个类比重要因为现实中的很多问题天然决定了该用哪种距离。城市路网导航用曼哈顿更合理除非你开的是直升机计算两个 GPS 坐标点的实际空间远近用欧几里得或者更精确的球面距离但如果是比较两份文档的语义特征向量那两种距离都可能有道理需要具体分析。有一个细节我经历过很多次才真正意识到曼哈顿距离对坐标系的旋转是敏感的而欧几里得距离具有旋转不变性。也就是说如果你把整个坐标系旋转 45 度重新计算两个固定物理点的距离欧几里得距离不变曼哈顿距离变。这一点在图像特征匹配、空间变换任务里会直接导致结果差异后面讲几何性质时再展开。2. 几何性质与数学本质的差异2.1 单位圆与距离空间的形状在数学上一种距离度量定义了空间中的球面。欧几里得空间中的单位圆是标准的圆形所有到原点距离等于 1 的点构成一个圆。但曼哈顿空间中的单位圆是什么形状很多人第一次算这个问题会愣一下满足 |x| |y| 1 的点画出来是一个旋转了 45 度的正方形顶点在坐标轴上更像一个菱形。如果继续沿着这个思路切比雪夫距离L∞取各维度差值绝对值的最大值的单位圆就是正儿八经的正方形。这个几何直觉极其重要。它直接决定了距离度量对异常值的容忍度嵌套空间下的体积对比高维空间中的行为差异我来举个例子说明高维的影响。设特征维度是 d所有特征值均匀分布在 [-1, 1] 之间。计算任意两点之间的欧几里得距离和曼哈顿距离随着维度升高前者会受平方求和的影响使得距离的绝对值分布更集中而后者是绝对值求和分布更分散。在实际模型中这就意味着用曼哈顿距离时最近邻的区分度可能更明显而欧几里得距离在高维下所有距离都趋同——这就是维度灾难的一种体现。很多做推荐系统的人都有体会特征向量维度上百后点积和欧几里得距离的检索效果明显退化换曼哈顿或者余弦往往能找到意外惊喜。2.2 性质对比关于旋转、可微与三角不等式为了更清楚地说明我把关键性质整理成一个对照表性质曼哈顿距离 (L1)欧几里得距离 (L2)旋转不变性无依赖坐标系方向有任意旋转不改变距离可微性在差值等于 0 的点不可微处处可微除零点外对异常值敏感度低绝对值抑制高平方放大三角不等式成立但等号条件更多成立等号条件更严格单位圆形状菱形正方形旋转45度圆形坐标轴相关性隐含坐标轴方向假设纯几何空间距离先说可微性的影响。机器学习的损失函数里L1 正则化和 L2 正则化的本质差异就在于这俩距离度量在优化时的行为。L1 的不可微点在零点处会产生稀疏解把很多特征的系数压成 0而 L2 会均匀地缩小系数。很多做特征选择的朋友应该都体会过LassoL1能直接把无关特征系数剃掉RidgeL2则保留全部特征但压缩数值。这就是距离度量数学性质在算法层面的直接映射。三角不等式这一点也藏了很多坑。欧几里得距离满足三角不等式d(A,C) ≤ d(A,B) d(B,C)而且通常严格小于。曼哈顿距离也满足三角不等式但它有一个特征——当中间点 B 恰好位于 A 到 C 的某种阶梯路径上时等号条件非常容易满足。什么意思就是曼哈顿距离在某些数据布局下会丧失中介辨别能力三个点看起来都差不多远。这在聚类算法中可能导致边界样本归属不稳定。在实际业务里如果你发现聚类结果总是边界模糊不同算法反复调整初始化都差不多可以考虑是否是因为曼哈顿距离的等号条件太容易成立让点与点之间缺乏区分度。3. 应用场景选择与实战经验3.1 特征空间中的相似度计算KNN 与聚类的选型思路先说最常见的场景K近邻算法KNN、K-means 聚类、层次聚类等等这些基于距离度量的算法完全依赖你选择哪种距离定义相似。我有一个经历印象挺深。某次做用户行为聚类特征向量是用户在几个类目下的行为计数。数据经过标准化后我试了欧几里得距离聚类结果把高频行为和低频行为用户混在一起分不出层次。后来换曼哈顿距离结果清晰很多。为什么因为计数类特征往往带有明显的偏态分布和异常值——有少数用户行为量大得离谱。欧几里得距离会放大这些异常维度上的差异导致个别极端用户把聚类中心拉偏。曼哈顿距离对每个维度的差异只取绝对值虽然也会受影响但不像平方那样放大。在这个场景下我的选型建议是特征是计数、频率类数据优先考虑曼哈顿对偏态分布更稳健特征是连续物理量坐标、长度、温度欧几里得更自然特征经过 L2 归一化向量长度归一化到单位范数欧几里得排序结果和余弦相似度一致可以直接用高维稀疏特征曼哈顿往往比欧几里得更可用实在不行试余弦3.2 路径规划与网格地图中的启发函数如果你做过基于栅格地图的路径规划比如 A* 算法距离度量的选择直接影响搜索效率和路径质量。这里的逻辑很清晰4 连通网格只能上下左右走曼哈顿距离是完美的启发函数8 连通网格还能斜着走切比雪夫距离更合适任意角度自由移动用欧几里得距离启发函数有一个核心约束它必须不大于真实代价才能保证 A* 找到最优解即可采纳性。在四连通网格中两点之间最短真实路径就是横平竖直的曼哈顿距离所以用曼哈顿距离作为启发函数既不会低估也不会高估属于完美启发。而如果你在四连通网格里用了欧几里得距离由于斜线距离总是小于实际路径的曼哈顿距离启发函数会严重低估代价导致搜索需要扩展大量节点效率大幅下降。反过来在可以自由移动的连续空间曼哈顿又显得太保守了启发函数给出的估值太低搜索范围变得很大。我踩过这个坑第一版路径规划 A* 的启发式用了曼哈顿结果在一张没有障碍物的 200x200 地图上搜索节点数爆炸后来改成欧几里得节点数缩小了一个数量级。路径规划问题的关键是让你的距离度量尽量贴近真实运动代价。3.3 图像处理与直方图匹配图像处理和计算机视觉里也存在这两种距离的鲜明对照。拿直方图匹配来说。两幅图像的颜色直方图可以看作高维空间中的向量衡量它们之间的差异可以用欧几里得距离也可以用曼哈顿距离。但在实际应用中曼哈顿距离在直方图相似度上经常表现得更好。原因是直方图本身就是计数的产物颜色分箱后每个箱子的值代表像素数量欧几里得距离会对大差异箱子过度加权比如一个箱子差了 100 和差了 10欧几里得会认为前者的权重是后者的 100 倍而曼哈顿只认为是 10 倍。对颜色分布相似性判断来说后者往往更符合直觉。另一个经典例子是模板匹配中的 SAD绝对差值和与 SSD差值平方和。SAD 就是曼哈顿距离SSD 就是欧几里得距离的平方。在光照变化较大的场景SAD 通常更稳健因为平方项对亮度突变更敏感。很多实时视觉跟踪的框架里默认用 SAD 计算块匹配代价就是这个原因。如果做图像处理时发现匹配结果老是过拟合到某些强梯度区域试试换 SAD 或曼哈顿类距离常常能平滑掉这种偏差。3.4 归一化之前必须想清楚的事这个经验我觉得比选哪种距离本身更重要。不管用哪种距离如果特征之间的量纲差异巨大计算出的距离都会被大数值维度主导那么距离就失去了比较多个维度的意义。举个例子。两个特征维度一个是用户年龄0-100一个是用户月消费金额0-20000。如果不归一化直接用欧几里得距离计算两个用户的相似度年龄维度的贡献可以忽略不计距离实际上变成了消费金额的绝对值差。而曼哈顿距离遇到类似问题时至少每个维度只贡献绝对值但大数维度依然占主导。所以我的铁律是先归一化再谈距离度量。常见的做法包括 Min-Max 归一化、Z-score 标准化针对稀疏特征还有 unit vector 归一化。归一化之后两种距离度量的对比才有意义。但要注意一个隐蔽的坑Z-score 标准化后曼哈顿距离和欧几里得距离的选择会显著影响KNN的表现。因为 Z-score 把每个维度的方差都变成 1欧几里得距离等于所有维度上距离平方和的平方根意味着每个维度的重要性完全对等而曼哈顿则对每个维度的绝对差异直接求和在高维且很多特征属于噪声的情况下噪声维度的贡献会被线性累加反而可能压过有效信号。这个场景下如果你知道特征里噪声维度较多欧几里得相对更能抑制噪声平方和开方后大值被稀释而曼哈顿则会把噪声直接加进去。这类问题没有万能的答案得结合数据情况实验对比。4. 代码实现、常见问题与排坑实录4.1 距离计算的工程实现实际工程中用 Python 实现这两种距离非常简单numpy 几行就搞定import numpy as np def euclidean_distance(a, b): return np.linalg.norm(a - b) def manhattan_distance(a, b): return np.sum(np.abs(a - b)) # 示例 p1 np.array([3.0, 4.0, 2.0]) p2 np.array([1.0, 7.0, 6.0]) print(euclidean_distance(p1, p2)) # sqrt(4 9 16) 5.385 print(manhattan_distance(p1, p2)) # 2 3 4 9.0批量计算距离矩阵时scipy.spatial.distance 提供 cdist 和 pdist效率高且自带多种度量from scipy.spatial.distance import cdist X np.random.rand(100, 10) Y np.random.rand(50, 10) d_euclidean cdist(X, Y, metriceuclidean) d_manhattan cdist(X, Y, metriccityblock)工程上有几个小提示计算欧几里得距离时直接用 np.linalg.norm 会触发 sqrt如果只是比较谁更近可以省略 sqrt直接比较平方距离省一次开方计算高维批处理中cdist 默认会分配一个大矩阵M 行 N 列样本量大时注意内存必要时分块处理对稀疏矩阵scipy.spatial.distance 的 cdist 支持有限建议自己用稀疏矩阵乘法实现曼哈顿距离的加速版本4.2 真实项目中的踩坑与排查距离度量选错这件事往往不是立即暴露的而是藏在效果指标后面。第一个坑未归一化直接算距离。我见过一个推荐系统项目特征里有一个维度是购买次数另一个是客单价两者量纲差了上百倍。结果模型学到的近邻关系几乎完全由客单价决定购买次数的信号完全被淹没。排查时用特征重要性分析看不出问题后来打印了几组最近邻样本才发现距离被某个维度主导。解决方案是 Min-Max 归一化 重训模型效果立刻改善。第二个坑在高维稀疏向量里用欧几里得距离。一个文本分类项目特征向量用 TF-IDF 表示维度上万向量稀疏度 90% 以上。一开始用欧几里得距离做 KNN准确率非常不稳定。换成曼哈顿距离后稳定提升了几个百分点。原因很简单TF-IDF 向量的稀疏性使得大部分维度差值都是 0但有少量维度差值很大欧几里得对这些大差值平方放大容易让个别异常特征主导而曼哈顿线性累加更平滑保留了多个维度共同贡献相似度的信息。在稀疏高维特征场景下距离度量的选择影响非常明显。第三个坑坐标系变换后曼哈顿距离的意义发生漂移。某次做几何特征的相似度匹配特征向量是物体在图像中的位置 (x, y)。我用曼哈顿距离计算两个检测框位置相似度一开始效果还行后来把图像坐标做了旋转增强曼哈顿距离的相似度排序就乱了。原因正如前面所讲——曼哈顿距离依赖坐标轴方向旋转坐标系后曼哈顿距离变了但物理上的空间距离没有变。这个场景必须回归欧几里得或者对特征空间进行对齐后再用曼哈顿。这三个坑如果能在项目早期识别出来能省大量调试时间。4.3 距离度量选择的决策清单经过这些实践我整理了一个适合自己的选型逻辑供参考1. 任务是空间/物理量相关 → 欧几里得优先 坐标定位、距离估算、几何匹配等 2. 特征是计数/频率/稀疏向量 → 曼哈顿优先 TF-IDF、直方图、行为计数等 3. 对异常值敏感度高 → 曼哈顿优先 欧几里得的平方会放大异常影响 4. 特征维度高 噪声维度多 → 测试对比优先欧几里得试跑 平方和开方能稀释噪声曼哈顿线性累加噪声 5. 路径规划网格地图 4连通用曼哈顿8连通用切比雪夫自由移动用欧几里得 6. 不确定 → 归一化后在验证集上直接 A/B 对比这只是一个起点不是金科玉律。真实数据往往比这些直觉复杂得多很多项目里我会同时算两种距离放进模型里做特征甚至把两种距离同时作为相似度特征交给下游模型去学习权重效果经常会比二选一更好。在 KNN 和聚类这类强依赖距离的算法里一个更进阶的做法是直接用加权混合距离d_mix α * d_manhattan (1-α) * d_euclidean通过网格搜索确定 α。这个技巧我试过几次在处理混合类型特征时往往能得到比单一度量更好的效果。4.4 常见问题速查问题现象可能原因建议方案近邻样本不符合业务直觉特征量纲差异大归一化后重算距离高维特征下所有距离接近维度灾难换曼哈顿/余弦或降维聚类边界模糊不清晰曼哈顿等号条件易成立换欧几里得并检查特征冗余匹配结果被个别维度过拟合平方项放大异常维度换曼哈顿或对特征做降权旋转/缩放后结果不一致曼哈顿依赖坐标轴空间对齐或换欧几里得TF-IDF 场景 KNN 效果差稀疏向量 欧几里得换曼哈顿或余弦这个表是我在几次项目的复盘记录里提炼出来的并非理论推导的产物大家遇到类似问题时可以直接对照排查。4.5 关于数据预处理的一点心得最后再补充一个容易忽略的点无论选择哪种距离数据预处理必须和距离度量配套设计。如果选了欧几里得距离特征最好做 Z-score 标准化让每个维度的方差一致这样欧几里得距离才不会语义漂移。如果选了曼哈顿距离特征可以做 Min-Max 归一化再到单位区间曼哈顿距离等于各维度绝对差之和含义清晰也方便解释结果。另外对于含有缺失值的数据两种距离的处理难度也不同。欧几里得距离在缺失值较多时通常需要填充或删除样本曼哈顿距离对缺失值更宽松某些实现允许跳过失控维度只计算有效维度上的绝对差。sklearn 的 pairwise_distances 对带缺失值的数组支持有限通常需要自己写掩码。如果数据中缺失率较高曼哈顿距离更容易做出部分匹配的工程方案。我自己的习惯是预处理管线先定型再在固定管线上对比不同距离度量而不是先选距离再调整预处理否则两者互相干扰很难定位问题。曼哈顿和欧几里得的对比说到底不是哪个更正确而是哪个更适合当前的数据和问题。数学定义只是起点真正有价值的是理解每种距离在数据中的行为倾向然后在实验里反复验证。建议你下次做相似度、聚类、检索或者路径规划时花几分钟想一想自己数据的形态再决定选哪一种。多数情况下这一步能避免你后面花几十倍的时间在调参和排查上。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。