使用 SciPy 计算 Minkowski 距离

scipyscientific computingprogramming

Minkowski 距离是欧几里得距离和曼哈顿距离的广义形式,是两点之间的距离。它主要用于向量的距离相似性。以下是在 n 维空间中计算 Minkowski 距离的广义公式 −

$$\mathrm{D= \big[\sum_{i=1}^{n}|r_i-s_i|^p\big]^{1/p}}$$

这里,

si 和 ri 是数据点。

n 表示 n 空间。

p 表示范数的阶

SciPy 为我们提供了一个名为 minkowski 的函数,该函数返回两点之间的 Minkowski 距离。让我们看看如何使用 SciPy 库计算两点之间的 Minkowski 距离 −

示例

# 导入 SciPy 库
from scipy.spatial import distance
# 定义点
A = (1, 2, 3, 4, 5, 6)
B = (7, 8, 9, 10, 11, 12)
A, B
# 计算 Minkowski 距离
minkowski_distance = distance.minkowski(A, B, p=3)
print('Minkowski Distance b/w', A, 'and', B, 'is: ', minkowski_distance)

输出

((1, 2, 3, 4, 5, 6), (7, 8, 9, 10, 11, 12))

(1, 2, 3, 4, 5, 6) 和 (7, 8, 9, 10, 11, 12) 之间的 Minkowski 距离为:10
.902723556992836

我们计算了 order(p) = 3 的 Minkowski 距离。但是当 order 为 2 时,它将代表欧几里得距离,而当 order 为 1 时,它将代表曼哈顿距离。让我们通过下面给出的示例来理解它 −

示例

# 导入 SciPy 库
from scipy.spatial import distance
# 定义点
A = (1, 2, 3, 4, 5, 6)
B = (7, 8, 9, 10, 11, 12)
A, B

# 闵可夫斯基和曼哈顿距离
minkowski_distance_with_order1 = distance.minkowski(A, B, p=1)
print('P)1 阶的明可夫斯基距离:',minkowski_distance_with_order1,'
曼哈顿距离:',manhattan_distance) # 闵可夫斯基和欧几里得距离距离 minkowski_distance_with_order2 = distance.minkowski(A, B, p=2) print('P)2 阶的明可夫斯基距离:',minkowski_distance_order_2, '
欧几里得距离:',euclidean_distance)

输出

((1, 2, 3, 4, 5, 6), (7, 8, 9, 10, 11, 12))
P)1 阶的明可夫斯基距离:36.0
曼哈顿距离:36

P)2 阶的明可夫斯基距离:14.696938456699069
欧几里得距离: 14.696938456699069

相关文章