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如何实现两个dataframe相减

    pandas如何实现两个dataframe相减

    这篇文章主要介绍了pandas如何实现两个dataframe相减方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • 深入剖析Python的列表和元组

    深入剖析Python的列表和元组

    这篇文章主要介绍了深入剖析Python的列表和元组,Python有4个内建的数据结构,它们可以统称为容器,因为它们实际上是一些“东西”组合而成的结构,而这些“东西”,可以是数字、字符甚至列表,或是它们的组合,需要的朋友可以参考下
    2023-07-07
  • Python argparse模块应用实例解析

    Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Django Form 实时从数据库中获取数据的操作方法

    Django Form 实时从数据库中获取数据的操作方法

    这篇文章主要介绍了Django Form 实时从数据库中获取数据的相关知识,本文给大家介绍的非常详细,具有一定的参考借鉴价值 ,需要的朋友可以参考下
    2019-07-07
  • 打包python 加icon 去掉cmd黑窗口方法

    打包python 加icon 去掉cmd黑窗口方法

    今天小编就为大家分享一篇打包python 加icon 去掉cmd黑窗口方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • pytorch/transformers 最后一层不加激活函数的原因分析

    pytorch/transformers 最后一层不加激活函数的原因分析

    这里给大家解释一下为什么bert模型最后都不加激活函数,是因为损失函数选择的原因,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-01-01
  • python实现添加图片到word文档中

    python实现添加图片到word文档中

    这篇文章主要介绍了python实现添加图片到word文档中方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 使用Python给PDF添加目录书签的实现方法

    使用Python给PDF添加目录书签的实现方法

    有时下载到扫描版的 PDF 是不带书签目录的,这样阅读起来很不方便,下面通过 python 实现一个半自动化添加书签目录的脚本,文中通过代码介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • python之dlib包安装失败问题及解决

    python之dlib包安装失败问题及解决

    这篇文章主要介绍了python之dlib包安装失败问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • Vue中自定义指令的三个常用方法小结

    Vue中自定义指令的三个常用方法小结

    这篇文章主要为大家详细介绍了Vue中自定义指令的三个常用方法,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以了解一下
    2024-02-02

最新评论