N维空间两点之间的距离

各种距离:
N维空间内两个点x=(x1,x2,…,xn)和点y=(y1,y2,…,yn)之间的各种距离

目录

      • - 欧氏距离
      • - 曼哈顿距离
      • - 切比雪夫距离
      • - 闵可夫斯基距离
      • - 标准化欧氏距离
      • - 马氏距离
      • - 巴氏距离
      • - 余弦相似度
      • 编辑距离 and 文本相似度

import numpy as np
from numpy import ndarray

- 欧氏距离

def euclidean_distance(x: ndarray, y: ndarray) -> float:"""欧氏距离Args:x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点Returns:两点的欧式距离"""return np.sqrt(np.sum((x - y) ** 2))

- 曼哈顿距离

def manhattan_distance(x: ndarray, y: ndarray) -> float:"""曼哈顿距离Args:x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点Returns:两点的曼哈顿距离"""return float(np.sum(np.abs(x - y)))

- 切比雪夫距离

def chebyshev_distance(x: ndarray, y: ndarray) -> float:"""切比雪夫距离Args:x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点Returns:两点的切比雪夫距离"""return np.max(np.abs(x - y))

- 闵可夫斯基距离

def minkowski_distance(x: ndarray, y: ndarray, p: int) -> float:"""闵可夫斯基距离Args:x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点p: int, 闵可夫斯基距离其实是一类距离,当p=2时,等价于欧氏距离Returns:两点的闵可夫斯基距离"""return (np.sum((np.abs(x - y)) ** p)) ** (1 / p)

- 标准化欧氏距离

def standard_euclidean_distance(x: ndarray, y: ndarray, sigma: float) -> float:"""标准化欧氏距离Args:x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点sigma: x, y所在样本集的标准差Returns:两点的标准化欧氏距离"""return np.sqrt(np.sum(((x - y) / sigma) ** 2))

- 马氏距离

def mahalanobis_distance(x: ndarray, y: ndarray, covariance_matrix: ndarray) -> float:"""马氏距离Parameters----------x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点covariance_matrix: x和y所在样本集合的协方差矩阵Return------两点的马氏距离"""cov = np.linalg.inv(covariance_matrix)  # 协方差矩阵的逆subtract = (x - y).reshape((-1, 1))return np.sqrt(np.dot(np.dot(subtract.T, cov), subtract))[0, 0]

- 巴氏距离

def bhattacharyya_distance(x: ndarray, y: ndarray) -> float:"""TODO: 巴氏距离Args:x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点Returns:两点的巴氏距离"""

- 余弦相似度

def cosine_similarity(x: ndarray, y: ndarray) -> float:"""余弦相似度Parameters----------x: (n_dim, 1), n维空间的一个样本点y: (n_dim, 1), n维空间的一个样本点Return------两点的余弦相似度"""return np.dot(x, y) / np.sqrt(np.sum(x ** 2)) / np.sqrt(np.sum(y ** 2))

编辑距离 and 文本相似度

def edit_distance(x: ndarray, y: ndarray) -> float:"""TODO: 编辑距离"""def text_similarity(x, y) -> float:"""TODO: 文本相似度"""


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部