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

在NumPy中计算坐标间欧氏距离的代码逻辑疑问

解释NumPy计算欧氏距离的常见两行代码

假设你写的是NumPy中计算欧氏距离的标准两行代码(毕竟这是最常用的实现方式),我来拆解它们的作用和背后的原理:

先看最典型的写法:

diff = x1 - x2
distance = np.sqrt(np.sum(diff ** 2))

或者另一种更简洁的变体:

diff = x1 - x2
distance = np.linalg.norm(diff)

第一行:diff = x1 - x2

这一步是计算两个坐标点对应维度的差值:

  • 假设x1和x2是代表n维空间点的NumPy数组(比如x1 = np.array([1, 2]),x2 = np.array([4, 6]))。
  • NumPy的数组减法是逐元素操作,每个维度的数值会分别相减,得到的diff数组里的每个元素就是对应维度的差值(上面的例子里diff会是[-3, -4])。
  • 这正好对应欧氏距离公式的第一步:对每个维度计算(x_i - y_i)。

第二行的两种实现逻辑

情况1:distance = np.sqrt(np.sum(diff ** 2))

这一行完整实现了欧氏距离的核心计算:

  1. diff ** 2:对diff里的每个元素做平方操作,对应公式中的(x_i - y_i)^2;
  2. np.sum(...):把所有平方后的元素求和,对应公式里的Σ(x_i - y_i)^2;
  3. np.sqrt(...):对求和结果开平方根,得到最终的欧氏距离√Σ(x_i - y_i)^2。

情况2:distance = np.linalg.norm(diff)

np.linalg.norm是NumPy线性代数模块的范数计算函数,默认计算的是L2范数——而L2范数的定义恰好就是欧氏距离。

  • 它内部和第一种情况做了完全相同的操作(平方→求和→开根号),只是把这些步骤封装成了更简洁的函数调用,适合追求代码简洁性的场景。

举个直观的例子验证:

import numpy as np
x1 = np.array([0, 0])  # 原点
x2 = np.array([3, 4])  # 3-4-5直角三角形的顶点
diff = x1 - x2  # 得到 [-3, -4]
distance = np.sqrt(np.sum(diff ** 2))  # 计算√(9+16)=5,和手动计算结果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:22:53