Hausdorff 距离

news/2025/2/28 18:56:15/

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.ppmy.cn/news/86300.html

相关文章

《Java并发编程实战》课程笔记(二)

可见性、原子性和有序性问题:并发编程 Bug 的源头 源头之一:缓存导致的可见性问题 在单核时代,所有的线程都是在一颗 CPU 上执行,CPU 缓存与内存的数据一致性容易解决。 因为所有线程都是操作同一个 CPU 的缓存,一个…

Zebec生态进展迅速,频被BitFlow、Matryx DAO等蹭热度碰瓷

进入到 2023 年以来, Zebec 生态的整体发展突飞猛进,除了流支付协议 Zebec Protocol 不断通过收购来扩大自身流支付业务、与万事达等合作推出 Zebec Card 等在支付业务上,实现进展外,其社区驱动的Layer3 模块化链 Nautilus Chain …

css基础技巧

1. emmet语法 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title><style>…

koa2获取HTTP请求参数

HTTP 什么是HTTP HTTP&#xff0c;即超文本传输协议&#xff0c;是一种实现客户端和服务器之间通信的响应协议&#xff0c;它是用作客户端和服务器之间的请求。 客户端&#xff08;浏览器&#xff09;会向服务器提交HTTP请求&#xff1b;然后服务器向客户端返回响应&#xf…

ENSP安装教程【手把手教学】

安装ENSP 简介ENSP概述设备支持 首先需要的环境安装顺序 安装后的测试 简介 ENSP概述 eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化的网络设备仿真平台&#xff0c;主要对企业网路由器、交换机、WLAN等设备进行软件仿真&#xf…

大数据开发之 Impala介绍

Impala 介绍 Impala 主要特点Impala与 Hive的异同之处 Impala 是 Cloudera 开源的一个高性能、分布式、SQL 查询引擎&#xff0c;用于Apache Hadoop 上进行交互式数据分析。Impala 可以实现实时的 SQL 查询操作&#xff0c;最初是为了解决 Hive-MapReduce 处理速度慢的问题&…

Linux 防火墙 Firewalld

firewalld概述 firewalld防火墙是Centos7系统默认的防火墙管理工具&#xff0c;取代了之前的iptables防火墙&#xff0c;也是工作在网络层&#xff0c;属于包过滤防火墙。 firewalld和iptables都是用来管理防火墙的工具&#xff08;属于用户态&#xff09;来定义防火墙的各种规…

SDOI2015 约数个数和

洛谷P3327 [SDOI2015]约数个数和 题目大意 设 d ( x ) d(x) d(x)为 x x x的约数个数&#xff0c;给定 n , m n,m n,m&#xff0c;求 ∑ i 1 n ∑ j 1 m d ( i j ) \sum\limits_{i1}^n\sum\limits_{j1}^md(ij) i1∑n​j1∑m​d(ij) 有 T T T组数据。 1 ≤ T , n , m ≤ 500…