Hausdorff 距离

news2024/10/6 8:39:17

1. 定义

给定欧氏空间中的两点集 A = { a 1 , a 2 , . . . } \rm A=\left \{a_1, a_2,... \right\} A={a1,a2,...} B = { b 1 , b 2 , . . . } \rm B=\left \{b_1, b_2,... \right\} B={b1,b2,...} H a u s d o r f f {\rm Hausdorff} Hausdorff 距离就是用来衡量这两个集合间的距离,定义其公式为:
H ( A , B ) = m a x [   h ( A , B ) , h ( B , A )   ] {\rm H\left (A,B\right)}={\rm max}\left [\:h(A,B), h(B,A)\: \right] H(A,B)=max[h(A,B),h(B,A)]
其中, h ( A , B ) = m a x a ∈ A   m i n b ∈ B ∥ a − b ∥ \rm h\left(A,B\right)=\underset{a\in A}{max} \: \underset{b\in B}{min} \left \|a-b \right \| h(A,B)=aAmaxbBminab h ( B , A ) = m a x b ∈ B   m i n a ∈ A ∥ b − a ∥ \rm h\left(B,A\right)=\rm\underset{b\in B}{max} \: \underset{a\in A}{min} \left \|b-a \right \| h(B,A)=bBmaxaAminba H ( A , B ) \rm H \left(A,B\right) H(A,B) 称为双向 H a u s d o r f f {\rm Hausdorff} Hausdorff距离 h ( A , B ) \rm h \left(A,B\right) h(A,B)称为从集合 A \rm A A到集合 B \rm B B的单向 H a u s d o r f f {\rm Hausdorff} Hausdorff距离,同理, h ( B , A ) {\rm h \left(B,A\right)} h(B,A)称为从集合 B {\rm B} B到集合 A {\rm A} A的单向 H a u s d o r f f {\rm Hausdorff} Hausdorff距离。

2. 通过例子理解该定义

详见该篇blog中的例子:
https://blog.csdn.net/maizousidemao/article/details/105030333?ydreferer=aHR0cHM6Ly9ibG9nLnNjaWVuY2VuZXQuY24v

理解 H a u s d o r f f {\rm Hausdorff} Hausdorff衡量距离的计算逻辑后,在使用时,可以直接用Python包👇🏻
(看完例子还不懂怎么计算的,看下面的解释)

3. 用Python计算 H a u s d o r f f {\rm Hausdorff} Hausdorff距离

  • 导入第三方包👇🏻
from scipy.spatial.distance import directed_hausdorff
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics.pairwise import euclidean_distances
  • 官方给出的算例,给定两个集合 u \rm u u v \rm v v👇🏻
u = np.array([(1.0, 0.0),
              (0.0, 1.0),
              (-1.0, 0.0),
              (0.0, -1.0)])
v = np.array([(2.0, 0.0),
              (0.0, 2.0),
              (-2.0, 0.0),
              (0.0, -4.0)])
  • 调用函数directed_hausdorff(u,v),求得单向 H a u s d o r f f {\rm Hausdorff} Hausdorff距离,并计算双向 H a u s d o r f f {\rm Hausdorff} Hausdorff距离👇🏻
directed_hausdorff(u,v)  # 计算u到v的单向Hausdorff距离
--->输出为:(2.23606797749979, 3, 0)

directed_hausdorff(v,u)  # 计算v到u的单向Hausdorff距离
--->输出为:(3.0, 3, 3)

hausdorff_distance = max(directed_hausdorff(u,v)[0],directed_hausdorff(v,u)[0]) #  计算u与v之间的双向Hausdorff距离
print(hausdorff_distance)
--->输出为:(3.0)

4. 结果解释与理解

(1) 关于directed_hausdorff(u,v)输出值的解释。

  •        \;\;\; 结果 ( 2.236 , 3 , 0 ) (2.236, 3, 0) (2.236,3,0)中,第1个值指 u \rm u u v \rm v v的单向 H a u s d o r f f \rm Hausdorff Hausdorff距离为2.236,第2和3个值指的是,产生距离为2.236的两个数据点分别在集合 u \rm u u和集合 v \rm v v中的位置,如 ( 3 , 0 ) (3,0) (3,0)指的是 u 3 = [ 0 , − 1 ] \rm u_3=[0,-1] u3=[0,1] v 0 = [ 2 , 0 ] \rm v_0=[2,0] v0=[2,0]
  •        \;\;\; 结果 ( 3.0 , 3 , 3 ) (3.0, 3, 3) (3.0,3,3)同理,第1个值指 v \rm v v u \rm u u的单向 H a u s d o r f f \rm Hausdorff Hausdorff距离为3,第2和3个值指的是,产生距离为3的两个数据点分别在集合 u \rm u u和集合 v \rm v v中的位置,如 ( 3 , 0 ) (3,0) (3,0)指的是 v 3 = [ 0 , − 4 ] \rm v_3=[0,-4] v3=[0,4] u 3 = [ 0 , − 1 ] \rm u_3=[0,-1] u3=[0,1]

(2)手算该过程,直观地解释。
在这里插入图片描述
(3) 辅助理解。计算 u \rm u u v \rm v v v \rm v v u \rm u u之间的欧氏距离,更容易了解该过程。下述结果👇🏻一一对应上图中的手算结果。

euclidean_distances(u,v)  # 
---->输出为:
array([[1.        , 2.23606798, 3.        , 4.12310563],
       [2.23606798, 1.        , 2.23606798, 5.        ],
       [3.        , 2.23606798, 1.        , 4.12310563],
       [2.23606798, 3.        , 2.23606798, 3.        ]])
       
euclidean_distances(v,u)
--->输出为:
array([[1.        , 2.23606798, 3.        , 2.23606798],
       [2.23606798, 1.        , 2.23606798, 3.        ],
       [3.        , 2.23606798, 1.        , 2.23606798],
       [4.12310563, 5.        , 4.12310563, 3.        ]])

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/570124.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于SSM的在线考试系统开发与设计-(附源码文档)-毕业设计

文章目录 1.适用人群2.你将收获3.项目介绍4.系统需求分析4.1 需求特性分析4.2 功能需求分析 5.系统设计5.1 系统总体结构设计5.2 数据库设计5.2.1 数据库概念原则设计5.2.2 数据库各部分模块设计5.2.3 数据库表设计 6.系统详细设计6.1 系统各模块功能设计6.1.1 登录模块6.1.2 注…

chatgpt赋能python:如何利用Python加快计算速度

如何利用Python加快计算速度 在大数据时代,计算效率的问题成为了企业和科研机构普遍关注的焦点问题。Python是一种高级编程语言,其具有灵活、易学、语法简洁、运行速度快等优点,因此在数据分析和科学计算领域广泛应用。然而,Pyth…

chatgpt赋能python:Python内部函数介绍

Python内部函数介绍 Python是一门功能强大、易于学习的编程语言,拥有许多内部函数可供使用。本文将介绍Python的内部函数和其用途,以便更好地利用和理解Python。 什么是内部函数? 内部函数是Python提供的一组内置函数,它们可以…

2023/5/25总结

学习CSS list-style:none 去掉无序列表的带有的样式,比如原点。 border-radius:length 设置圆角,也可以写%,不一定需要些半径大小,也可以顺时针写半径大小,就会出现四个顶点不一样的圆角。或者写:borde…

chatgpt赋能python:Python写Log的技巧与最佳实践

Python 写 Log 的技巧与最佳实践 在编写 Python 应用程序时,日志记录(Logging)是一项非常重要的功能,尤其是在调试或部署过程中。本文将介绍一些 Python 写 Log 的技巧和最佳实践,以帮助你更好地处理日志记录并提高应…

Java的String(字符串详解)

字符串 1.字符串的常见构造方法 主要有三种,一种是直接使用常量去构造,要么使用new String来构造,或者还可以使用字符数组的形式。 public static void main(String[] args) { // 使用常量串构造 String s1 "hello"; System.ou…

order by排序语句的用法

文章目录 学习连接语法用法示例1、按单个列的值排序2、按多个列的值排序3、按指定的规则排序4、按中文拼音字母顺序5、Order by和where条件共用 数据库中常用order by关键字对结果集进行排序,又可使用desc和asc来进行指定规则的排序。 学习连接 数据库:…

chatgpt赋能python:单行for循环:Python编程的神器

单行for循环:Python编程的神器 Python是一门功能强大的编程语言,其中的单行for循环功能更是让它的编程效率倍增。在本文中,我们将探讨单行for循环是如何提升编程效率的。 什么是单行for循环 单行for循环是一种简单而强大的编程方式。它可以…

【利用AI让知识体系化】V8引擎相关知识

文章目录 I. 引言V8引擎的背景和概述 II. V8的设计和工作原理V8的整体设计V8的工作流程和运行机制V8在浏览器中的应用场景 III. 内存管理内存模型和内存管理策略垃圾回收机制和算法内存泄漏和内存优化 IV. JIT编译器JIT编译器的作用和优势V8的编译流程和编译器类型编译器优化技…

make的路径搜索

文章目录 前言一、VPATH二、vpath三、vpath 与 VPATH 的差别四、GPATH 用法总结 前言 在大型软件项目中,通常会存在多个目录,包含有源代码、头文件、库文件等不同类型的文件。在编译或链接时,需要指定相应的文件路径才能正确地进行构建。但是…

【计算机图形学】曲线和曲面(Bezier曲线 Bezier曲面)

模块5 曲线和曲面 一 实验目的 编写曲线和曲面的算法 二 实验内容 1:绘制Bezier曲线,并采用自行设计输入和交互修改数据点的方式。 实验结果如下图所示: 第一步:输入特征多边形的顶点个数,并按照顺序输入顶点的坐…

css3新增特性

1. 初始化 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-width, …

怎么通过ecs云服务器来给小程序发送消息

如果您想通过 ECS 云服务器向小程序发送消息&#xff0c;可以使用 WebSocket 技术。具体步骤如下&#xff1a; 1. 在 ECS 云服务器上搭建 WebSocket 服务器。您可以使用 Node.js、Java、Python 等编程语言来实现 WebSocket 服务器&#xff0c;具体实现方式可参考相关技术文档或…

Java笔记——KMP算法

KMP算法 文章目录 KMP算法KMP算法介绍主要逻辑Next数组KMP搜索代码解释生成next数组模式串匹配 源码展示 KMP算法介绍 KMP算法是一种串的模式匹配算法&#xff0c;用来求子串在主串的位置。是数据结构中比较难的一种算法。KMP算法的核心在于点在于如何利用子串生成next数组&am…

vim的使用、vim入门的三种常用模式、以及vim中常用的命令(超详细)

vim 入门的三种常用模式&#xff1a;分别是 1. 命令模式、2. 插入/编辑模式、3. 底行模式 1. 命令模式 控制屏幕光标的移动&#xff0c;字符、字或行的删除&#xff0c;移动复制某区段及进入Insert mode下&#xff0c;或者到 last line mode 如下&#xff0c;这个就是命令模式…

Numpy入门看这一篇就够了【史上入门最简单,开袋即食】

一边学习一边分享&#xff0c;好记性不如烂笔头 目录 一边学习一边分享&#xff0c;好记性不如烂笔头 NumPy问题思考&#xff1a; numpy是什么&#xff1f; 为什么要学习numpy&#xff1f; numpy是怎么组成的&#xff1f;特点是什么&#xff1f; numpy的应用场景有哪些&a…

css定位模式

1. 为什么需要定位&#xff1f; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"…

自动化专业求职方向与前景分析(合集)

自动化专业求职方向与前景分析 自动化专业求职方向 自动化专业是近几年高校教育改革中几个控制类专业合并后形成的宽口径专业&#xff0c;其实自动化就是搞控制的&#xff0c;用老师的话说就是控制一切可以控制的物理量&#xff0c;还说学自动化的人都要有控制的欲望。所谓控制…

Augmented Language Models(增强语言模型)

Augmented Language Models: A Survey 先上地址&#xff1a;https://arxiv.org/pdf/2302.07842.pdf 概率论难以支撑通用人工智能技术的诞生。—— Yann LeCun LLMs取得的巨大进展不再多说&#xff0c;它目前被诟病最多的问题是其会提供非事实但看似可信答案&#xff0c;即幻觉…

数组排序——从荷兰国旗问题到快速排序

本文首先将会介绍荷兰国旗问题&#xff0c;再讲述如何从该问题过渡到快速排序。 荷兰国旗问题 荷兰国旗问题&#xff08;Dutch National Flag Problem&#xff09;是由荷兰计算机科学家Edsger Dijkstra所提出&#xff0c;该问题的描述如下&#xff1a; 给定n个红、白、蓝三种颜…