使用 SciPy 计算闵科夫斯基距离
闵科夫斯基距离作为欧几里得和曼哈顿距离的广义形式,是两点之间的距离。它主要用于向量的距离相似性。以下是计算 n 维空间中的闵科夫斯基距离的广义公式 -
$$\mathrm{D= \big[\sum_{i=1}^{n}|r_i-s_i|^p\big]^{1/p}}$$
此处:
si 和 ri 是数据点。
n 表示 n 维空间。
p 表示范数的阶数
SciPy 向我们提供了一个名为 minkowski 的函数,用来返回两点之间的闵科夫斯基距离。让我们看看如何使用 SciPy 库计算两点之间的闵科夫斯基距离 -
示例
# Importing the SciPy library from scipy.spatial import distance # Defining the points A = (1, 2, 3, 4, 5, 6) B = (7, 8, 9, 10, 11, 12) A, B # Computing the Minkowski distance 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)) Minkowski Distance b/w (1, 2, 3, 4, 5, 6) and (7, 8, 9, 10, 11, 12) is: 10 .902723556992836
我们计算了阶数 (p) = 3 的闵科夫斯基距离。但是当阶数为 2 时,这会表示欧几里得距离,而阶数为 1 时,这会表示曼哈顿距离。让我们借助以下示例理解它 -
示例
# Importing the SciPy library from scipy.spatial import distance # Defining the points A = (1, 2, 3, 4, 5, 6) B = (7, 8, 9, 10, 11, 12) A, B # minkowski and manhattan distance minkowski_distance_with_order1 = distance.minkowski(A, B, p=1) print('Minkowski Distance of order(P)1:',minkowski_distance_with_order1,'
Manhattan Distance: ',manhattan_distance) # minkowski and euclidean distance minkowski_distance_with_order2 = distance.minkowski(A, B, p=2) print('Minkowski Distance of order(P)2:',minkowski_distance_order_2, '
Euclidean Distance: ',euclidean_distance)
输出
((1, 2, 3, 4, 5, 6), (7, 8, 9, 10, 11, 12)) Minkowski Distance of order(P)1: 36.0 Manhattan Distance: 36 Minkowski Distance of order(P)2: 14.696938456699069 Euclidean Distance: 14.696938456699069
广告