闵可夫斯基距离不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述,它包含了我们在《距离定义(一):欧几里得距离》和《距离定义(二):曼哈顿距离》中的欧几里得距离( p = 2 p=2 p=2)和曼哈顿距离( p = 1 p=1 p=1)就是闵可夫斯基距离的一种特殊情况:
d ( x , y ) = ( ∑ i = 1 n ( x i − y i ) p ) 1 p d(x, y)=(\sum_{i=1}^n(x_i-y_i)^p)^{\frac{1}{p}} d(x,y)=(i=1∑n(xi−yi)p)p1
下面我们来看一下闵可夫斯基距离的Python实现,其中 p p p为闵可夫斯基距离的参数:
def MinkowskiDistance(x, y, p):
import math
import numpy as np
zipped_coordinate = zip(x, y)
return math.pow(np.sum([math.pow(np.abs(i[0]-i[1]), p) for i in zipped_coordinate]), 1/p)