python计算两点间距离的5种常用方法

 更新时间:2026年04月16日 08:15:49   作者:detayun  
计算两点距离在 Python 中有多种方法,本文介绍了在Python中计算两点距离的5种常用方法,每种方法都有各自的适用场景和优缺点,感兴趣的小伙伴可以了解下

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

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

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

import math

def distance_between_points(p1, p2):
    """计算两点之间的欧几里得距离"""
    x1, y1 = p1
    x2, y2 = p2
    
    # 计算距离
    distance = math.sqrt((x2 - x1)**2 + (y2 - y1)**2)
    return distance

# 示例
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(),这是最简洁的方法:

import math

point1 = (1, 2)
point2 = (4, 6)

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

优点

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

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

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

import numpy as np

# 方法 3.1: 使用 np.linalg.norm
point1 = 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 提供了更多距离计算选项(曼哈顿距离、切比雪夫距离等):

from scipy.spatial import distance

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}")

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

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

def distance_squared(p1, p2):
    """计算距离的平方(不开方)"""
    x1, y1 = p1
    x2, y2 = p2
    return (x2 - x1)**2 + (y2 - y1)**2

point1 = (1, 2)
point2 = (4, 6)
point3 = (5, 5)

dist2_1 = distance_squared(point1, point2)  # 25
dist2_2 = distance_squared(point1, point3)  # 25

# 比较时不需要开方
if dist2_1 < dist2_2:
    print("point2 更近")
elif dist2_1 > dist2_2:
    print("point3 更近")
else:
    print("距离相等")

完整示例:包含 3D 点

import math

def calculate_distance(p1, p2):
    """支持任意维度的点"""
    if len(p1) != len(p2):
        raise ValueError("两点维度必须相同")
    
    # 计算各维度差值的平方和
    sum_of_squares = sum((a - b)**2 for a, b in zip(p1, p2))
    
    # 开方
    return math.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(),代码最简洁且性能好!

到此这篇关于python计算两点间距离的5种常用方法的文章就介绍到这了,更多相关python计算两点间距离内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 对pandas中两种数据类型Series和DataFrame的区别详解

    对pandas中两种数据类型Series和DataFrame的区别详解

    今天小编就为大家分享一篇对pandas中两种数据类型Series和DataFrame的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-11-11
  • python使用Pandas库提升项目的运行速度过程详解

    python使用Pandas库提升项目的运行速度过程详解

    这篇文章主要介绍了python使用Pandas库提升项目的运行速度过程详解,这是一篇关于“如何充分利用Pandas内置的强大且易于上手的特性”的指引。此外,你将学习到一些实用的节省时间的技巧,需要的朋友可以参考下
    2019-07-07
  • python flask框架中多种查询参数的获取方式

    python flask框架中多种查询参数的获取方式

    这篇文章主要介绍了pythonflask框架的生命周期以及多种查询参数的获取方式,文章通过代码示例和图文讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-03-03
  • 8个Python编程进阶常用技巧分享

    8个Python编程进阶常用技巧分享

    介绍 Python 炫酷功能的文章层出不穷,但是还有很多 Python 的编程小技巧鲜被提及,所以本文会试着介绍一些其它文章没有提到的小技巧,让我们一探究竟吧
    2023-07-07
  • Ubuntu配置Pytorch on Graph (PoG)环境过程图解

    Ubuntu配置Pytorch on Graph (PoG)环境过程图解

    这篇文章主要介绍了Ubuntu配置Pytorch on Graph (PoG)环境过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例

    python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例

    这篇文章主要介绍了python操作openpyxl导出Excel 设置单元格格式及合并处理代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • itchat和matplotlib的结合使用爬取微信信息的实例

    itchat和matplotlib的结合使用爬取微信信息的实例

    下面小编就为大家带来一篇itchat和matplotlib的结合使用爬取微信信息的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Python 中获取数组的子数组示例详解

    Python 中获取数组的子数组示例详解

    在 Python 中获取一个数组的子数组时,可以使用切片操作,使用切片操作来获取一个数组的一段连续的子数组,并且还可以使用一些方便的语法来简化代码,这篇文章主要介绍了如何在 Python 中获取数组的子数组,需要的朋友可以参考下
    2023-05-05
  • Python 字典(Dictionary)操作详解

    Python 字典(Dictionary)操作详解

    这篇文章主要介绍了Python 字典(Dictionary)的详细操作方法,需要的朋友可以参考下
    2014-03-03
  • python global关键字的用法详解

    python global关键字的用法详解

    这篇文章主要介绍了python global关键字的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09

最新评论