numpy-ml 距离度量模块全解析:euclidean、manhattan、chebyshev、minkowski 与 hamming 的公式、源码与实战
机器学习人工智能【免费下载链接】numpy-mlMachine learning, in numpy项目地址https://gitcode.com/gh_mirrors/nu/numpy-ml点击查看免费下载距离度量是几乎所有基于相似性/邻近性的机器学习算法的基石numpy-ml 在numpy_ml/utils/distance_metrics.py中提供了一组Common distance functions常见距离函数并以 docs/numpy_ml.utils.distance_metrics.rst 作为其 API 参考文档。本篇以该文档为骨架逐一对euclidean、chebyshev、hamming、manhattan、minkowski五个函数展开数学定义、源码实现、参数语义与边界条件并结合仓库中 BallTree 与 KNN 的真实调用链以及 test_utils.py 中与 SciPy 的对拍测试讲解它们在项目中的实际角色。读完本文你将掌握如何在 numpy-ml 内直接调用这些距离函数、理解每个指标何时该用、何时不能用以及如何把它们作为可插拔metric注入到最近邻类模型中。模块定位numpy-ml 工具库中的距离函数numpy_ml.utils.distance_metrics是 numpy-ml 工具子包的一部分。在 numpy_ml/utils/init.py 中它与其他工具模块testing、data_structures、kernels、windows、graphs、misc一同被导出# numpy_ml/utils/__init__.py from . import testing from . import data_structures from . import distance_metrics from . import kernels from . import windows from . import graphs from . import misc因此你既可以通过from numpy_ml.utils.distance_metrics import euclidean精确导入也可以通过from numpy_ml.utils import distance_metrics走子包入口。全部函数均以纯 NumPy 向量化方式实现仅依赖numpy不引入 SciPy 等外部依赖——这正是Machine learning, in numpy项目理念在工具层的一个缩影。该模块共提供 5 个函数覆盖了向量空间中三类最常用的距离族函数别名/记号适用输入典型语义euclideanL2 距离任意实数向量欧氏空间中两点直线距离manhattanL1 距离 / cityblock任意实数向量沿坐标轴方向累加的曼哈顿街区距离chebyshevL∞ 距离任意实数向量各维度差的最大值棋盘距离minkowskiMinkowski-p 距离任意实数向量 阶数p上述 L1/L2 的泛化统一形式hamming汉明距离整数值向量逐位不一致比例常用于离散编码/标签下文按照 numpy_ml.utils.distance_metrics.rst 中罗列的顺序逐一展开。euclideanL2 欧氏距离数学定义与源码欧氏距离是两个实向量x、y逐分量差的平方和再开方d(x, y) sqrt( Σ_i (x_i - y_i)^2 )numpy_ml/utils/distance_metrics.py 中的实现只有一行完全对应上式def euclidean(x, y): Compute the Euclidean (L2) distance between two real vectors return np.sqrt(np.sum((x - y) ** 2))参数与返回值x, y形状均为(N,)的numpy.ndarray即两个一维实数向量且要求长度一致N相同。返回 dfloat即两向量间的 L2 距离。当x y时返回 0.0。使用要点由于欧氏距离天然满足对称性、非负性与三角不等式它是严格的度量metric也是仓库中最常用的默认距离。它也是下文 Minkowski 距离在p2时的特例。manhattanL1 曼哈顿距离数学定义与源码曼哈顿距离把两向量的差值绝对值沿所有维度直接累加d(x, y) Σ_i |x_i - y_i|对应实现见 numpy_ml/utils/distance_metrics.pydef manhattan(x, y): Compute the Manhattan (L1) distance between two real vectors return np.sum(np.abs(x - y))参数与返回值x, y形状(N,)的一维实数向量。返回 dfloatL1 距离。使用要点相比 L2L1 对离群分量不敏感不会像平方那样放大差值在稀疏/高维特征、以及沿网格移动这类场景中更贴合语义。它与 SciPy 的scipy.spatial.distance.cityblock等价这一等价关系被仓库测试直接利用见下文对拍验证小节。chebyshevL∞ 切比雪夫距离数学定义与源码切比雪夫距离取各维度差值绝对值中的最大值d(x, y) max_i |x_i - y_i|实现见 numpy_ml/utils/distance_metrics.pydef chebyshev(x, y): Compute the Chebyshev (L∞) distance between two real vectors return np.max(np.abs(x - y))参数与返回值x, y形状(N,)的一维实数向量。返回 dfloatL∞ 距离。使用要点L∞ 度量只关心最坏的那个维度差异多大因此适合用于棋盘移动、最大偏差控制等场景它同样是 Minkowski 距离在p → ∞时的极限情形。由于只取最大值它对其他维度的细微差异完全无感。minkowski可参数化的 Minkowski-p 距离数学定义与源码Minkowski 距离把 L1/L2 等统一为一个带阶数p的公式d(x, y) ( Σ_i |x_i - y_i|^p )^(1/p)实现见 numpy_ml/utils/distance_metrics.pydef minkowski(x, y, p): Compute the Minkowski-p distance between two real vectors. return np.sum(np.abs(x - y) ** p) ** (1 / p)参数与返回值x, y形状(N,)的一维实数向量。pfloat且要求p 1。它是距离函数的阶数参数。返回 dfloatMinkowski-p 距离。参数语义与边界条件重点这是 5 个函数中唯一带额外参数的其参数语义在源码 docstring 中有明确说明值得展开p 1退化为 L1 距离即manhattanp 2退化为 L2 距离即euclideanp 1Minkowski-p不满足三角不等式因而不是合法的距离度量not a valid distance metric。这一点在 numpy_ml/utils/distance_metrics.py 的 docstring 中特别标注。使用时若需要度量性质例如作为保证三角不等式的树/图算法的距离应确保p 1p → ∞时趋近于chebyshevL∞。hamming汉明距离数学定义与源码汉明距离统计两向量逐位不一致的比例除以向量长度做了归一化d(x, y) (1/N) · Σ_i 1{x_i ≠ y_i}实现见 numpy_ml/utils/distance_metrics.pydef hamming(x, y): Compute the Hamming distance between two integer-valued vectors. return np.sum(x ! y) / len(x)参数与返回值x, y形状(N,)的numpy.ndarraydocstring 明确要求两个向量都应为整数值integer-valued。若传入浮点向量严格相等的比较可能因精度问题产生非预期结果因此按约定应传入离散取值如整数标签、编码。返回 dfloat归一化后的不一致比例取值在[0, 1]区间——两向量完全一致为 0完全不一致为 1。使用要点汉明距离适合衡量离散序列、编码或标签向量的相异程度。注意它与前四个函数不同前四个度量数值大小的差异而汉明度量取值是否不同与差的量级无关。实战直接调用示例将模块与函数导入后即可直接使用所有函数都接受两个等长一维数组import numpy as np from numpy_ml.utils.distance_metrics import ( euclidean, manhattan, chebyshev, minkowski, hamming, ) x np.array([1.0, 2.0, 3.0]) y np.array([4.0, 6.0, 3.0]) print(euclidean(x, y)) # sqrt((3)^2 (4)^2 0) 5.0 print(manhattan(x, y)) # 3 4 0 7.0 print(chebyshev(x, y)) # max(3, 4, 0) 4.0 print(minkowski(x, y, 1)) # 7.0与 manhattan 一致 print(minkowski(x, y, 2)) # 5.0与 euclidean 一致 # 汉明距离针对整数/离散向量 a np.array([1, 0, 1, 1, 0]) b np.array([1, 1, 0, 1, 0]) print(hamming(a, b)) # 不一致位数 2 / 总位数 5 0.4在写调用代码前建议先阅读 numpy_ml.utils.distance_metrics.rst 对应的函数签名其中每个函数的参数、返回类型与数学公式均有完整说明源码 docstring 中的 NumPy/SciPy 风格注释与之一致。仓库中的真实调用链BallTree 与 KNN这些距离函数不是孤立存在的——它们以可注入 metric 回调的形式被最近邻类模型消费这是本模块在项目中最核心的应用场景。BallTree默认欧氏距离、动态传入任意距离numpy_ml/utils/data_structures.py 中的BallTree构造函数接受metric参数默认值为euclidean# numpy_ml/utils/data_structures.py from .distance_metrics import euclidean class BallTree: def __init__(self, leaf_size40, metricNone): ... self.metric metric if metric is not None else euclidean该self.metric被用于两处关键计算data_structures.py建树阶段每个节点/叶子的半径取max(metric(centroid, x) for x in X)即球心到球内最远点的距离查询阶段nearest_neighbors计算查询点与候选点的metric(x, n.key)并在_knn中使用dist_to_ball dist(x, root.centroid) - root.radius做剪枝data_structures.py。因此传入不同的距离函数会直接影响树结构半径大小与剪枝效率而不仅仅改变最终距离数值。KNN以 metric 参数对外暴露numpy_ml/nonparametric/knn.py 的KNN将metric透传给BallTree注释明确写明If None, use theeuclideanmetric by defaultclass KNN: def __init__(self, k5, leaf_size40, classifierTrue, metricNone, weightsuniform): ... self._ball_tree BallTree(leaf_sizeleaf_size, metricmetric)这意味着你可以像下面这样用manhattan、chebyshev或带特定p的minkowski构造 KNN 分类器/回归器from numpy_ml.nonparametric.knn import KNN from numpy_ml.utils.distance_metrics import manhattan model KNN(k5, classifierTrue, metricmanhattan, weightsuniform) model.fit(X_train, y_train) preds model.predict(X_test)从源码结构看只要传入满足metric(x, y) - float签名的任意函数不必局限于本模块的 5 个都能作为 KNN/BallTree 的距离度量——这是该模块可扩展性的体现。正确性验证与 SciPy 的对拍测试仓库测试 numpy_ml/tests/test_utils.py 将本模块各函数与 SciPy 的对应实现逐一比对作为正确性的事实依据本模块函数SciPy 对照实现测试位置euclideanscipy.spatial.distance.euclideantest_utils.pyhammingscipy.spatial.distance.hammingtest_utils.pyminkowskiscipy.spatial.distance.minkowskitest_utils.pychebyshevscipy.spatial.distance.chebyshevtest_utils.pymanhattanscipy.spatial.distance.cityblocktest_utils.py测试逻辑为固定随机种子如np.random.seed(12345)随机生成长度 1~100 的向量用np.testing.assert_almost_equal断言两者数值一致test_minkowski还会在[1, 11]区间随机采样p值覆盖不同阶数。此外test_nonparametric.py 用metriceuclidean的KNN回归器与 scikit-learn 的KNeighborsRegressor(p2, metricminkowski, algorithmball_tree)对拍间接印证了euclidean≡minkowski(p2)这一数学等价关系在端到端模型层面同样成立。使用注意事项小结结合源码 docstring 与调用方式使用本模块时有以下几点值得留意维度一致性所有函数都要求x、y形状均为(N,)长度不同会触发 NumPy 广播或直接报错调用前应自行校验。hamming 的输入类型应传入整数值向量见 distance_metrics.py 的 docstring 约定且返回的是归一化比例而非原始不匹配计数。minkowski 的p取值p 1/p 2分别对应 L1/L2p 1时不满足三角不等式不是合法度量distance_metrics.py在依赖度量性质的算法如 BallTree 剪枝中使用需谨慎。metric 的可插拔性在BallTree/KNN中不传metric时默认欧氏距离data_structures.py传入自定义函数即可替换但需保证签名兼容f(x, y) - float。延伸阅读模块 API 参考docs/numpy_ml.utils.distance_metrics.rst距离函数源码numpy_ml/utils/distance_metrics.py消费方之一球树数据结构numpy_ml/utils/data_structures.py消费方之二KNN 模型numpy_ml/nonparametric/knn.py与 SciPy 对拍的单测numpy_ml/tests/test_utils.py端到端 KNN 回归对比测试numpy_ml/tests/test_nonparametric.py赞分享机器学习人工智能【免费下载链接】numpy-mlMachine learning, in numpy项目地址https://gitcode.com/gh_mirrors/nu/numpy-ml点击查看免费下载相关推荐NumPy 窗函数完全指南bartlett、blackman、hamming、hanning 与 kaiser 的公式、实现与实战NumPy 窗函数完全指南bartlett、blackman、hamming、hanning 与 kaiser 的公式、实现与实战 本文以 NumPy 官方参科学计算数据分析palera1n 深度解析基于 checkm8 的越狱工具原理、实战与进阶配置palera1n 深度解析基于 checkm8 的越狱工具原理、实战与进阶配置 palera1n 是一款基于 checkm8 BootROM 硬件漏洞的越狱工机器学习人工智能numpy-ml 预处理模块实战FeatureHasher、OneHotEncoder、Standardizer 与 minibatch 全解析numpy ml 预处理模块实战FeatureHasher、OneHotEncoder、Standardizer 与 minibatch 全解析 本文是 nu机器学习人工智能上一篇2025最强AI开发工具链从0到1构建AI Agents自动化测试与CI/CD流水线下一篇Bubblezone性能优化指南让你的终端应用响应速度提升10倍的秘诀创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

新能源简介分析PPT课件制作指南:从框架设计到实操落地

新能源简介分析PPT课件制作指南:从框架设计到实操落地

简介:这份PPT课件是新能源主题的专业教学课件,共42页,面向能源相关专业学生、教师及行业入门者,系统梳理新能源的基本概念与各类新能源技术。资源包为单个pptx文件,大小2.62MB,随开随用,适合课堂…

2026/9/21 1:54:00 阅读更多 →
NumPy 2.5.2 补丁版发布解读:abi3t 稳定 ABI 下 StringDType C API 变更与 28 项修复明细

NumPy 2.5.2 补丁版发布解读:abi3t 稳定 ABI 下 StringDType C API 变更与 28 项修复明细

科学计算数据分析 【免费下载链接】numpy The fundamental package for scientific computing with Python. 项目地址: https://gitcode.com/gh_mirrors/nu/numpy 点击查看 免费下载 NumPy 2.5.2 是紧随 2.5.1 之后发布的补丁版(patch release&#xff…

2026/9/21 1:54:00 阅读更多 →
VitePress 快速开始:从安装、初始化到本地开发环境搭建

VitePress 快速开始:从安装、初始化到本地开发环境搭建

前端文档 【免费下载链接】vitepress Vite & Vue powered static site generator. 项目地址: https://gitcode.com/gh_mirrors/vi/vitepress 点击查看 免费下载 本指南面向首次接触 VitePress 的开发者,完整讲解基于 Vite & Vue 的静态站点生成…

2026/9/21 1:53:00 阅读更多 →

最新新闻

人工智能Python基础学习路径:从环境搭建到机器学习实战

人工智能Python基础学习路径:从环境搭建到机器学习实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 3:04:41 阅读更多 →
iTerm2 it2 CLI 测试计划实战指南:从会话、窗口到认证与配置的完整验证手册

iTerm2 it2 CLI 测试计划实战指南:从会话、窗口到认证与配置的完整验证手册

桌面应用AI 应用 【免费下载链接】iTerm2 iTerm2 is a terminal emulator for Mac OS X that does amazing things. 项目地址: https://gitcode.com/gh_mirrors/it/iTerm2 点击查看 免费下载 it2cli 是 iTerm2 仓库内随附的一个 Swift 命令行工具(可执行…

2026/9/21 3:04:41 阅读更多 →
HLS.js 浏览器 HLS 播放完整指南:基于 MSE 的转封装架构、特性矩阵与工程实践

HLS.js 浏览器 HLS 播放完整指南:基于 MSE 的转封装架构、特性矩阵与工程实践

音视频前端 【免费下载链接】hls.js HLS.js is a JavaScript library that plays HLS in browsers with support for MSE. 项目地址: https://gitcode.com/gh_mirrors/hl/hls.js 点击查看 免费下载 HLS.js 是一个用 JavaScript 实现的 HTTP Live Streaming&#xf…

2026/9/21 3:04:41 阅读更多 →
基于 Neural CDE 的混合连续时间策略(HCT)框架解析:从理论定义到 NDP 实现

基于 Neural CDE 的混合连续时间策略(HCT)框架解析:从理论定义到 NDP 实现

人工智能深度学习NLP计算机视觉强化学习 【免费下载链接】google-research Google Research 项目地址: https://gitcode.com/gh_mirrors/go/google-research 点击查看 免费下载 导读 本文以 hct/readme/index.md 为骨架,结合其配套文档 HCT_ReadMe.ipy…

2026/9/21 3:04:41 阅读更多 →
STM32+单运放K型热电偶测温实战:低成本高稳定方案

STM32+单运放K型热电偶测温实战:低成本高稳定方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 3:04:41 阅读更多 →
STM32+MPU6050固定翼增稳飞控:从姿态解算到PID调参与救机

STM32+MPU6050固定翼增稳飞控:从姿态解算到PID调参与救机

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/21 3:03:40 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/20 0:00:46 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/20 0:00:46 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/19 23:01:36 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/19 17:50:38 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →