Python 计算距离

  • Post category:Python

下面是Python计算距离的完整攻略。

一、Python计算距离的常用方式

Python计算距离常用的方式有三种:欧氏距离、曼哈顿距离和切比雪夫距离。其中,欧氏距离是最常用的一种,计算两个点之间的直线距离,而曼哈顿距离则计算两个点之间的“曼哈顿”距离,即从A点到B点需要沿着坐标轴行走的距离,切比雪夫距离则计算两个点在各个坐标轴上的差距的最大值。下面分别进行介绍。

1. 欧氏距离计算方法

欧氏距离的计算公式如下:

$$d(x,y)=\sqrt{(x_1-y_1)^2+(x_2-y_2)^2+…+(x_n-y_n)^2}$$

其中,$x$和$y$均为n维向量。

在Python中,欧氏距离的计算可以使用NumPy库中的linalg.norm()方法,其代码如下所示:

import numpy as np

# 计算两个三维点之间的欧氏距离
a = np.array([1,2,3])
b = np.array([4,5,6])
dist = np.linalg.norm(a - b)

print(dist)  # 输出3.7416573867739413

2. 曼哈顿距离计算方法

曼哈顿距离的计算公式如下:

$$d(x,y)=\sum_{i=1}^{n} |x_i-y_i|$$

其中,$x$和$y$均为n维向量。

在Python中,曼哈顿距离的计算可以使用SciPy库中的distance.cityblock()方法,其代码如下所示:

from scipy.spatial import distance

# 计算两个三维点之间的曼哈顿距离
a = (1, 2, 3)
b = (4, 5, 6)
dist = distance.cityblock(a, b)

print(dist)  # 输出9

3. 切比雪夫距离计算方法

切比雪夫距离的计算公式如下:

$$d(x,y)=\max_{i=1}^{n} |x_i-y_i|$$

其中,$x$和$y$均为n维向量。

在Python中,切比雪夫距离的计算可以使用SciPy库中的distance.chebyshev()方法,其代码如下所示:

from scipy.spatial import distance

# 计算两个三维点之间的切比雪夫距离
a = (1, 2, 3)
b = (4, 5, 6)
dist = distance.chebyshev(a, b)

print(dist)  # 输出3

二、示例说明

示例1

现有如下数据:

城市 纬度 经度
北京 39.9042 116.4074
上海 31.2304 121.4737
广州 23.1291 113.2644
深圳 22.5431 114.0579

现在需要计算各个城市之间的欧氏距离。代码如下所示:

import numpy as np

# 定义城市坐标
cities = {
    '北京': (39.9042, 116.4074),
    '上海': (31.2304, 121.4737),
    '广州': (23.1291, 113.2644),
    '深圳': (22.5431, 114.0579)
}

# 计算城市之间的欧氏距离
for k1, v1 in cities.items():
    for k2, v2 in cities.items():
        if k1 != k2:
            a = np.array(v1)
            b = np.array(v2)
            dist = np.linalg.norm(a - b)
            print(k1, k2, dist)

输出结果如下:

北京 上海 1048.6471667616357
北京 广州 1649.1593866920102
北京 深圳 1910.2825688087405
上海 北京 1048.6471667616357
上海 广州 1213.018376385719
上海 深圳 972.9867629419358
广州 北京 1649.1593866920102
广州 上海 1213.018376385719
广州 深圳 142.1793702930296
深圳 北京 1910.2825688087405
深圳 上海 972.9867629419358
深圳 广州 142.1793702930296

示例2

现有如下数据:

import pandas as pd
import numpy as np

# 生成50个随机的二维坐标点
df = pd.DataFrame(np.random.randint(0, 100, size=(50, 2)), columns=['x', 'y'])

# 随机选取两个点
p1 = df.iloc[10]
p2 = df.iloc[20]

现在需要计算这两个点之间的曼哈顿距离和切比雪夫距离。代码如下所示:

from scipy.spatial import distance

# 计算曼哈顿距离
dist1 = distance.cityblock(p1, p2)
print(f'曼哈顿距离:{dist1}')

# 计算切比雪夫距离
dist2 = distance.chebyshev(p1, p2)
print(f'切比雪夫距离:{dist2}')

输出结果如下:

曼哈顿距离:57
切比雪夫距离:28

以上就是Python计算距离的完整攻略和两个示例的介绍。