当前位置: 首页 > news >正文

python计算两点间的距离

计算两点距离在 Python 中有多种方法,我为你介绍几种最常用的方式:

方法一:使用欧几里得距离公式(最基础)

这是最直接的方法,使用数学公式:
距离 = √[(x₂ - x₁)² + (y₂ - y₁)²]

importmathdefdistance_between_points(p1,p2):"""计算两点之间的欧几里得距离"""x1,y1=p1 x2,y2=p2# 计算距离distance=math.sqrt((x2-x1)**2+(y2-y1)**2)returndistance# 示例point1=(1,2)point2=(4,6)dist=distance_between_points(point1,point2)print(f"两点{point1}{point2}之间的距离是:{dist}")# 输出: 5.0

方法二:使用math.dist()(Python 3.8+ 推荐)

Python 3.8 及以上版本提供了内置函数math.dist(),这是最简洁的方法:

importmath point1=(1,2)point2=(4,6)# 直接计算distance=math.dist(point1,point2)print(f"距离:{distance}")# 输出: 5.0

优点

  • 代码最简洁
  • 支持任意维度的点(2D、3D等)
  • 性能优化过

方法三:使用 NumPy(适合大量计算)

如果你需要处理大量数据或进行科学计算,NumPy 是最佳选择:

importnumpyasnp# 方法 3.1: 使用 np.linalg.normpoint1=np.array([1,2])point2=np.array([4,6])distance=np.linalg.norm(point2-point1)print(f"距离:{distance}")# 输出: 5.0# 方法 3.2: 手动计算distance=np.sqrt(np.sum((point2-point1)**2))print(f"距离:{distance}")# 输出: 5.0# 方法 3.3: 批量计算多个点points1=np.array([[1,2],[3,4],[5,6]])points2=np.array([[4,6],[7,8],[9,10]])distances=np.linalg.norm(points2-points1,axis=1)print(f"多个距离:{distances}")# 输出: [5. 5.65685425 5.65685425]

方法四:使用 SciPy(功能最强大)

SciPy 提供了更多距离计算选项(曼哈顿距离、切比雪夫距离等):

fromscipy.spatialimportdistance point1=(1,2)point2=(4,6)# 欧几里得距离euclidean_dist=distance.euclidean(point1,point2)print(f"欧几里得距离:{euclidean_dist}")# 曼哈顿距离 (|x2-x1| + |y2-y1|)manhattan_dist=distance.cityblock(point1,point2)print(f"曼哈顿距离:{manhattan_dist}")# 切比雪夫距离 (max(|x2-x1|, |y2-y1|))chebyshev_dist=distance.chebyshev(point1,point2)print(f"切比雪夫距离:{chebyshev_dist}")

方法五:不开方的距离(用于比较)

如果你只是需要比较距离大小,不需要实际距离值,可以省略开方操作以提高性能:

defdistance_squared(p1,p2):"""计算距离的平方(不开方)"""x1,y1=p1 x2,y2=p2return(x2-x1)**2+(y2-y1)**2point1=(1,2)point2=(4,6)point3=(5,5)dist2_1=distance_squared(point1,point2)# 25dist2_2=distance_squared(point1,point3)# 25# 比较时不需要开方ifdist2_1<dist2_2:print("point2 更近")elifdist2_1>dist2_2:print("point3 更近")else:print("距离相等")

完整示例:包含 3D 点

importmathdefcalculate_distance(p1,p2):"""支持任意维度的点"""iflen(p1)!=len(p2):raiseValueError("两点维度必须相同")# 计算各维度差值的平方和sum_of_squares=sum((a-b)**2fora,binzip(p1,p2))# 开方returnmath.sqrt(sum_of_squares)# 2D 点p1_2d=(1,2)p2_2d=(4,6)print(f"2D 距离:{calculate_distance(p1_2d,p2_2d)}")# 3D 点p1_3d=(1,2,3)p2_3d=(4,6,8)print(f"3D 距离:{calculate_distance(p1_3d,p2_3d)}")# 使用 math.dist (Python 3.8+)print(f"3D 距离 (math.dist):{math.dist(p1_3d,p2_3d)}")

性能对比建议

场景推荐方法
简单的 2D/3D 距离计算math.dist()(Python 3.8+)
需要兼容旧版本 Python手动公式 +math.sqrt()
批量计算大量点NumPy 的np.linalg.norm()
需要多种距离度量SciPy 的scipy.spatial.distance
只需比较距离大小距离平方(不开方)

最推荐:如果你使用 Python 3.8+,直接用math.dist(),代码最简洁且性能好!

http://www.jsqmd.com/news/647020/

相关文章:

  • autoclaw配置自定义模型:Kimi K2.5
  • SAP物料主数据里的‘税收类别’选错了?详解MWST销项税配置与VK11/VK13事务码的完整操作流程
  • 二、Redis在Win11中的高效配置与优化实践
  • 爱毕业aibiye等品牌依托互联网技术,打造了便捷高效的论文辅导解决方案
  • HTMX 4.0 发布:革新 Web 开发,性能与体验双提升!
  • SpringBoot项目用GraalVM打包成原生镜像,启动速度提升20倍的实战教程(附Windows/Linux配置)
  • Gitee CodePecker SCA:构筑企业数字化安全防线的智能卫士
  • 保姆级教程:在QGC地面站地图上为盘旋航点动态绘制半径圈(附源码)
  • 高效开发必备:Tabby终端工具的全方位使用指南
  • 大语言模型技术指南:长上下文是怎么做出来的?RoPE、位置插值、滑窗注意力与 KV Cache 详解
  • 7步精通Video DownloadHelper配套应用:从零开始的终极安装与配置实战指南
  • 暗黑3终极自动化指南:D3KeyHelper完整配置教程
  • 为什么你的多模态模型一增量就崩?——从视觉-语言对齐断裂到跨模态梯度冲突的底层归因分析
  • 树莓派Pico实战:用无源蜂鸣器做个简易电子琴(附完整代码)
  • CSS如何利用Sass简化CSS书写_通过嵌套与简写优化编码效率
  • 告别标准库!用STM32CubeMX HAL库驱动ILI9341 SPI屏,保姆级教程+完整代码
  • 前端包管理工具与Monorepo全面解析
  • Alibaba DASD-4B Thinking 实战:基于网络爬虫数据的市场舆情分析与报告生成系统
  • 训练数据+对齐映射+推理引擎三重隔离备份(行业首份LLM+VLM+ASR混合负载容灾SLA协议)
  • 爱毕业aibiye等七家专业团队凭借在线论文辅导服务,在行业内树立了标杆地位
  • 深耕广东高企申报15年,沐霖信息科技助力超3300家企业 - 沐霖信息科技
  • 别再只调库了!拆解无线充电项目,看STM32的ADC采样与OLED驱动到底怎么写
  • 基于STC89C52单片机的智能火灾监测系统(附源码与电路设计)
  • 解决Python卸载报错:No Python 3.9 installation was detected的实用指南
  • 兰亭妙微儿童语言学习App设计白皮书:IP化视觉、全流程闭环与趣味化交互的实战应用 - ui设计公司兰亭妙微
  • 中兴光猫超级权限解锁终极指南:zteOnu工具完全使用手册
  • 终极解决方案:5个技巧让GitHub访问速度提升10倍的完整指南
  • Linux服务器时间同步与审计日志轮转配置详解:避免日志混乱与时间不准的坑
  • 别再硬算拉格朗日乘子了!用Python+CMDP搞定带约束的强化学习任务(附代码)
  • 远程ROS开发效率翻倍:VSCode Remote-SSH直连Docker容器,一键调试并显示Rviz2(Ubuntu 18.04/20.04实测)