python distance matrix_机器学习中的距离盘点

1. 欧氏距离

欧式距离欧氏距离是最常见也是最常用的一种距离计算方式,也叫欧几里得距离、

距离。 函数形式如下:

表示两个

维向量,

为两个

维向量的欧式距离。

python实现

import numpy as np

x = np.random.random(10)

y = np.random.random(10)

# n维向量

#方法一:根据公式求解

d1 = np.sqrt(np.sum(np.square(x - y)))

#方法二:根据np.linalg.norm求解

d2 = np.linalg.norm(x-y)

#方法三:根据scipy库求解

from scipy.spatial.distance import pdist

X = np.vstack([x,y]) #将x,y两个一维数组合并成一个2D数组 ;[[x1,x2,x3...],[y1,y2,y3...]]

d3 = pdist(X) #d2=np.sqrt(x1-y1)

# m * n维矩阵欧氏距离计算, 一行代表一个样本,一列代表一个特征,计算对应样本间欧氏距离

from sklearn.metrics import pairwise_distances

from scipy.spatial import distance_matrix

from scipy.spatial.distance import cdist

d1 = pairwise_distances(x.reshape(-1, 10), y.reshape(-1, 10)) # 运行时间次之 占cpu多

d2 = distance_matrix(x.reshape(-1, 10), y.reshape(-1, 10))

d3 = cdist(x.reshape(-1, 10), y.reshape(-1, 10)) # 运行时间最短 占cpu少,建议使用

2. 曼哈顿距离

曼哈顿距离也称为城市街区距离、

距离,顾名思义,假设在曼哈顿街区从P点到Q点,我们不能直接穿过高楼大厦走直线的距离,而是表示走过的街道的距离。在二维坐标上的表示,即两个点在标准坐标系上的绝对轴距之和。具体公式表示:

表示两个

维向量,

为两个

维向量的曼哈顿距离。

python实现

import numpy as np

x = np.array([1,2,3])

y = np.array([4,5,6])

d1 = np.sum(np.abs(x-y))

d2 = np.linalg.norm(x-y, ord=1)

from scipy.spatial.distance import pdist

X=np.vstack([x,y])

d3=pdist(X,'cityblock')

3. 闵氏距离

闵氏距离,全名闵可夫斯基距离,它不是一种距离,而是一组距离的定义,是对多个距离度量公式的概括性的表述。函数表达:

p取1或2时的明氏距离是最为常用的:

p = 2即为欧氏距离。

p = 1时则为曼哈顿距离。

当p取无穷时的极限情况下,可以得到切比雪夫距离

P为不同值时,等距离组成的形状:

python实现

import numpy as np

x=np.random.random(10)

y=np.random.random(10)

#方法一:根据公式求解,p=2

d1=np.sqrt(np.sum(np.square(x-y)))

d2 = np.linalg.norm(x-y, ord=2)

from scipy.spatial.distance import pdist

X=np.vstack([x,y])

d3=pdist(X,'minkowski',p=2)

4. 切比雪夫距离

切比雪夫距离,也叫

度量,在国际象棋中,国王可以直行、横行、斜行,所以国王走一步可以移动到相邻的8个方格中的任意一个。国王从格子(x1,y1)走到格子(x2,y2)最少需要多少步,这个距离就叫切比雪夫距离。表示为:

python实现

import

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值