N维空间两点之间的距离

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

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: 文本相似度"""
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值