常见距离公式 numpy 实现

简介: 在使用 keras 或者使用 tf 做深度学习时,通常有些内容需要计算距离来作为判定相似程度的依据,如下列举一些常见的距离公式:def minkowski_distance(vec1, vec2, p=3): """ 闵氏距离 ...

在使用 keras 或者使用 tf 做深度学习时,通常有些内容需要计算距离来作为判定相似程度的依据,如下列举一些常见的距离公式:

def minkowski_distance(vec1, vec2, p=3):
    """
    闵氏距离
    当p=1时,就是曼哈顿距离
    当p=2时,就是欧氏距离
    当p→∞时,就是切比雪夫距离
    :param vec1:
    :param vec2:
    :param p:
    :return:
    """
    # return sum([(x - y) ** p for (x, y) in zip(vec1, vec2)]) ** (1 / p)
    return np.linalg.norm(vec1 - vec2, ord=p)

def cosine_distance(vec1, vec2):
    """
    夹角余弦
    :param vec1:
    :param vec2:
    :return:
    """
    vec1_norm = np.linalg.norm(vec1)
    vec2_norm = np.linalg.norm(vec2)
    return vec1.dot(vec2) / (vec1_norm * vec2_norm)

def euclidean_distance(vec1, vec2):
    """
    欧氏距离
    :param vec1:
    :param vec2:
    :return:
    """
    # return np.sqrt(np.sum(np.square(vec1 - vec2)))
    # return sum([(x - y) ** 2 for (x, y) in zip(vec1, vec2)]) ** 0.5
    return np.linalg.norm(vec1 - vec2, ord=2)

def manhattan_distance(vec1, vec2):
    """
    曼哈顿距离
    :param vec1:
    :param vec2:
    :return:
    """
    # return np.sum(np.abs(vec1 - vec1))
    return np.linalg.norm(vec1 - vec2, ord=1)

def chebyshev_distance(vec1, vec2):
    """
    切比雪夫距离
    :param vec1:
    :param vec2:
    :return:
    """
    # return np.abs(vec1 - vec2).max()
    return np.linalg.norm(vec1 - vec2, ord=np.inf)

def hamming_distance(vec1, vec2):
    """
    汉明距离
    :param vec1:
    :param vec2:
    :return:
    """
    return np.shape(np.nonzero(vec1 - vec2)[0])[0]

def jaccard_similarity_coefficient(vec1, vec2):
    """
    杰卡德距离
    :param vec1:
    :param vec2:
    :return:
    """
    return dist.pdist(np.array([vec1, vec2]), 'jaccard')
目录
相关文章
|
机器学习/深度学习
【Python-Keras】keras.layers.BatchNormalization解析与使用
BatchNormalization是一种用于深度神经网络的规范化方法,通过在每个batch上规范化前一层的激活值,加快模型训练速度,提高稳定性,并减少对初始化权重的敏感性,允许使用更大的学习率。
307 1
|
11月前
|
机器学习/深度学习 索引 Python
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
本文解释了NumPy中`argmax`函数的`axis`参数在不同维度数组中的应用,并通过代码示例展示了如何使用`axis=0`、`axis=1`和`axis=-1`来找到数组中最大值的索引。
1128 0
Numpy学习笔记(二):argmax参数中axis=0,axis=1,axis=-1详解附代码
|
11月前
|
物联网 vr&ar 数据安全/隐私保护
移动应用开发的未来:挑战与机遇
本文将深入分析当前移动应用开发的技术趋势和面临的挑战,同时探讨移动操作系统的最新发展。我们将从技术、市场和用户体验三个角度,全面评估移动应用开发的现状和未来方向。通过具体案例和数据分析,帮助开发者和企业更好地理解如何在竞争激烈的市场中保持领先地位。
|
自然语言处理 机器人 API
Instruct2Act:使用大型语言模型将多模态指令映射到机器人动作
Instruct2Act是一个框架,它结合了大型语言模型和多模态基础模型,将自然语言和视觉指令转换为机器人的顺序动作,实现精确的感知、规划和行动,展示了强大的零样本性能和灵活性。
300 0
Instruct2Act:使用大型语言模型将多模态指令映射到机器人动作
|
消息中间件 Java 开发者
Spring Cloud微服务框架:构建高可用、分布式系统的现代架构
Spring Cloud是一个开源的微服务框架,旨在帮助开发者快速构建在分布式系统环境中运行的服务。它提供了一系列工具,用于在分布式系统中配置、服务发现、断路器、智能路由、微代理、控制总线、一次性令牌、全局锁、领导选举、分布式会话、集群状态等领域的支持。
366 5
|
存储 Linux 索引
/proc的相关知识
`/proc`是Linux的一个伪文件系统,存储内核运行状态和进程信息。它包含以PID命名的子目录,提供对系统硬件、进程详情的查看和内核状态的修改。`/proc/self`是特殊目录,让进程能直接访问其自身信息,无需知道PID。通过`/proc/self/cmdline`、`cwd`、`exe`、`environ`和`maps`等文件,可以获取进程的命令行、工作目录、可执行文件路径、环境变量和内存映射等信息。`maps`显示内存区域和权限,`mem`则提供进程内存映射,但部分区域不可读。
192 4
|
Java 测试技术 Maven
5个编写技巧,有效提高单元测试实践
本文作者详细讲解了关于单元测试的相关知识,做好单元测试能有效地保障代码质量,本文将手把手教你学会应用单元测试并附有案例、测试插件。
|
XML 移动开发 Android开发
构建高效安卓应用:采用Jetpack Compose实现动态UI
【4月更文挑战第10天】 在现代移动开发中,用户界面的流畅性和响应性对于应用的成功至关重要。随着技术的不断进步,安卓开发者寻求更加高效和简洁的方式来构建动态且吸引人的UI。本文将深入探讨Jetpack Compose这一革新性技术,它通过声明式编程模型简化了UI构建过程,并提升了性能与跨平台开发的可行性。我们将从基本概念出发,逐步解析如何利用Jetpack Compose来创建具有数据动态绑定能力的安卓应用,同时确保应用的高性能和良好用户体验。
291 0
|
数据处理
InVEST模型的下载及入门操作(以InVEST3.13.0为例)
InVEST是一套免费的开源软件模型,是美国自然资本项目组开发的、用于评估生态系统服务功能量及其经济价值、支持生态系统管理和决策的一套模型系统,用于绘制和评估维持和实现人类生活的自然商品和服务。包括商品生产(如食物)、生命维持过程(如水净化)和充实生命的条件(如美丽、娱乐机会)以及选择的保护(如未来使用的遗传多样性)等模块。(翻译自模型官网)
2573 1
|
机器学习/深度学习 数据可视化 Python
batch_size对精确度和损失的影响
batch_size对精确度和损失的影响
533 0