算法笔记:Frechet距离度量

news2025/3/1 20:38:07

曲线之间相似性的度量,它考虑了沿曲线的点的位置和顺序

1 概念

1.1 直观理解

  •  主人走路径A,狗走路径B,他们有不同的配速方案
  • 主人和狗各自走完这两条路径过程中所需要的最短狗绳长度
    • (在某一种配速下需要的狗绳长度),但其他配速下需要的狗绳长度更长

1.2 数学理解

F(A, B)=\inf _{\alpha, \beta} \max _{t \in[0,1]}\{d(A(\alpha(t)), B(\beta(t)))\}

  • 两条曲线A(α(t))和B(β(t))之间距离最大值的下确界
    • t理解为时间
    • α(t)和β(t)理解为人和狗随时间变化的速度
    • A(α(t))和B(β(t))代表t时刻人和狗的位置
    • ——>最大值的下确界意思为,每一种人狗速度方案下,都有对应的距离最大值;那么对于所有的速度方案,这些距离最大值中最小的是哪个?

 

2 和Hausdorff距离的区别

数学笔记/scipy 笔记:豪斯多夫距离(Hausdorff )_UQI-LIUWJ的博客-CSDN博客

  • Fréchet度量考虑到了两条曲线的流动,因为其距离对Fréchet距离有贡献的点对沿着各自的曲线连续扫过。
    • 这使得Fréchet距离比任意点集的Hausdorff距离更能衡量曲线的相似性。
    • 两条曲线有可能有较小的Hausdorff距离,但有较大的Fréchet距离。

     

3 离散化Frechet距离

离散Fréchet距离是连续Fréchet距离的近似,当曲线所选取的离散点足够多时离散Fréchet距离近似等于连续Fréchet距离。

 3.1 python实现

3.1.1 数据集

import numpy as np
a_array = np.array([2, 4, 6, 8])
b_array = np.array([2, 3, 4, 6, 5, 7, 8])

3.1.2 距离函数

#距离函数
def euc_dist(pt1, pt2):
        return np.sqrt(np.square(pt2[0] - pt1[0]) + np.square(pt2[1] - pt1[1]))

 3.1.3 Frechet 距离

def _c(ca, i, j, P, Q):  
        if ca[i, j] > -1:
            return ca[i, j]
        #ca[i,j]之前计算过
        elif i == 0 and j == 0:  
            ca[i, j] = euc_dist(P[0], Q[0])
            #刚刚考虑P序列的0和Q序列的0时
        elif i > 0 and j == 0:  
            ca[i, j] = max(_c(ca, i - 1, 0, P, Q), euc_dist(P[i], Q[0]))
           # 刚刚考虑P序列的i和Q序列的0时
        elif i == 0 and j > 0:  
            ca[i, j] = max(_c(ca, 0, j - 1, P, Q), euc_dist(P[0], Q[j]))
            #刚刚考虑P序列的0和Q序列的j时
        elif i > 0 and j > 0:  
            ca[i, j] = max(min(_c(ca, i - 1, j, P, Q),  # P动Q不动
                               _c(ca, i - 1, j - 1, P, Q),  # P不动Q动
                               _c(ca, i, j - 1, P, Q)),  # 一起动
                           euc_dist(P[i], Q[j]))
            #min是不考虑i,j时,至少需要多长的”狗绳“
            #再取max表示考虑i,j时,需要多长的”狗绳“
        else: 
            ca[i, j] = float("inf")
            # 非法的无效数据,算法中不考虑,此时 i<0,j<0
        return ca[i, j]
def frechet_distance(P, Q):
        ca = np.ones((len(P), len(Q)))
        ca = np.multiply(ca, -1)
        # ca初始化成全-1的矩阵,shape = ( len(a), len(b) )
        dis = _c(ca, len(P) - 1, len(Q) - 1, P, Q)  
        return dis

 3.1.4 计算结果

curve_line_a = list(zip(range(len(a_array)), a_array))
curve_line_b = list(zip(range(len(b_array)), b_array))
#给a,b添加x坐标
curve_line_a
#[(0, 2), (1, 4), (2, 6), (3, 8)]

frechet_distance(curve_line_a,curve_line_b)
#3.0

 4 缺点

  • 对噪声很敏感

参考内容:

Frechet distance距离计算原理及python实现_frechet距离_spatial_coder的博客-CSDN博客

曲线相似度衡量——曲线距离计算Fréchet distance详解与python计算-物联沃-IOTWORD物联网

弗雷歇距离 matlab,离散Fréchet(弗雷歇) 距离评价曲线相似度_戴铂的博客-CSDN博客

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

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

相关文章

MySQL-高可用MHA(二)

目录 &#x1f341;通过keepalived方式 &#x1f342;安装keepalived &#x1f343;防火墙策略 &#x1f343;keep配置文件 &#x1f342;MHA应用keepalived &#x1f343;停止MHA &#x1f343;启动MHA &#x1f343;检查状态 &#x1f343;测试 &#x1f341;通过脚本实现VIP…

数据结构——线段树

线段树的结构 线段树是一棵二叉树&#xff0c;其结点是一条“线段”——[a,b]&#xff0c;它的左儿子和右儿子分别是这条线段的左半段和右半段&#xff0c;即[a, (ab)/2 ]和[(ab)/2 ,b]。线段树的叶子结点是长度为1的单位线段[a,a1]。下图就是一棵根为[1,10]的线段树&#xff1…

真题详解(UML图)-软件设计(四十七)

真题详解(Flynn分类)-软件设计&#xff08;四十六)https://blog.csdn.net/ke1ying/article/details/130072198 某搜索引擎在使用过程中&#xff0c;若要增加接受语音输入的功能&#xff0c;使用户可以通过语音来进行搜索&#xff0c;此时对应系统进行____维护&#xff1f; 正确…

基于逻辑回归构建肿瘤预测模型

使用逻辑回归构建肿瘤预测模型 描述 乳腺癌数据集包括569个样本&#xff0c;每个样本有30个特征值&#xff08;病灶特征数据&#xff09;&#xff0c;每个样本都属于恶性&#xff08;0&#xff09;或良性&#xff08;1&#xff09;两个类别之一&#xff0c;要求使用逻辑回归&…

Python学习笔记--函数

&#xff08;一&#xff09; 函数介绍 1. 函数&#xff1a;是组织好的&#xff0c;可重复使用的&#xff0c;用来实现特定功能的代码段。 eg. len()&#xff1a;实现统计长度这一特定功能的代码段。 2. 函数好处&#xff1a; * 将功能封装在函数内&#xff0c;可随时随地重复…

eSearch使用教程大全

下载&#xff1a; https://www.xsoftnet.com/share/a0002tNuuOswc.html产品&#xff1a; eSearch 即拥有 截屏OCR搜索翻译贴图以图搜图录屏功能。 截屏 框选裁切 框选大小位置可调整(支持方向键或 WASD) 框选大小栏可输入四则运算式调整 取色器 放大镜 画笔&#xff08;自由画…

Kafka系统整理 一

一、Kafka 概述 1.1 定义 Kafka传统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列 (Message Queue), 主要应用于大数据实时处理领域。 kafka最新定义&#xff1a;kafka是一个开源的分布式事件流平台&#xff08;Event Streaming Platform&#xff09;, 被…

PostgreSQL下载、安装、Problem running post-install step的解决、连接PostgreSQL

我是参考《SQL基础教程》来安装的&#xff0c;关于书的介绍、配套视频、相关代码可以参照下面的链接&#xff1a; SQL基础教程&#xff08;第2版&#xff09; (ituring.com.cn) 一、下载 我直接打开书中的下载链接时&#xff0c;显示的是这个界面&#xff1a; You are not …

Flink的窗口机制

窗口机制 tumble&#xff08;滚动窗口&#xff09; hop&#xff08;滑动窗口&#xff09; session&#xff08;会话窗口&#xff09; cumulate&#xff08;渐进式窗口&#xff09; Over&#xff08;聚合窗口&#xff09; 滚动窗口&#xff08;tumble&#xff09; 概念 滚…

002:Mapbox GL更改大气、空间及星星状态

第002个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中更改大气、空间及星星状态 。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共71行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设置:…

java截取字符串的方法

在 Java中&#xff0c;截取字符串的方法有多种&#xff0c;下面我们来介绍一下。 第一种方法&#xff0c;在 class中直接获取字符串&#xff0c; class. str是一个内置的字符串类&#xff0c;它有一个方法可以截取字符串&#xff0c;这个方法叫做 class. str &#xff08;&…

linux入门---缓冲区

查看问题 首先大家来看看下面这段代码 1 #include<stdio.h>2 #include<string.h>3 #include<unistd.h>4 int main()5 {6 printf("i am printf\n");7 fprintf(stdout,"i am fprintf\n");8 fputs("i am fputs\n",…

Unity --- 物理引擎 --- 触发器 与 碰撞器详解

碰撞器补充讲解 对第一个条件进行补充 --- 不仅要两者都具有碰撞组件&#xff0c;同时还需要两者的碰撞组件中都没有勾选 Is Trigger属性 1.上一篇文章中说了那么多&#xff0c;其实也可以总结为两个碰撞条件 --- a.两个游戏物体都具有碰撞器组件 &#xff0c;如果没有的话&…

【数据结构】哈希表详解以及代码实现

目录 1.来源&#xff1a; 2.哈希函数 1.哈希函数的设计规则 2.哈希函数的设计思路 3.哈希碰撞 4.解决哈希碰撞的方案 5.负载因子 3.基于开散列方案的HashMap实现 1.HashMap类中的属性 2.哈希函数 3.判断当前哈希表中是否含有指定的key值 4.判断当前哈希表中是否包含…

【尊享版】聊聊我最近比较重要的一些认知升级

超友们&#xff0c;早上好&#xff5e; 今天我为你带来的分享是《聊聊我最近比较重要的一些认知升级》&#xff0c;主要分为三个部分&#xff1a; 一、【10 点战略认知升级】 二、【10 点学习认知升级】 三、【5 点提效认知升级】 &#x1f388;一、【10 点战略认知升级】 …

基于Java+SpringBoot+vue的在线动漫信息平台设计与实现【源码(完整源码请私聊)+论文+演示视频+包运行成功】

博主介绍&#xff1a;专注于Java技术领域和毕业项目实战 &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例&#xff08;300套&#xff09; 目录 一、效果演示 二、…

一文吃透泛型

本文已经收录到Github仓库&#xff0c;该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校招社招分享等核心知识点&#xff0c;欢迎star~ Github地址 如果访问不了Github&#xff0c…

CVE-2017-10271 WebLogic XMLDecoder反序列化漏洞

靶场环境&#xff1a;vulnstack靶机-委派靶场 漏洞描述 CVE-2017-10271漏洞产生的原因大致是Weblogic的WLS Security组件对外提供webservice服务&#xff0c;其中使用了XMLDecoder来解析用户传入的XML数据&#xff0c;在解析的过程中出现反序列化漏洞&#xff0c;导致可执行任…

【RabbitMQ】Spring整合RabbitMQ、Spring实现RabbitMQ五大工作模式(万字长文)

目录 一、准备 1、创建maven项目​编辑 2、引入依赖 3、创建配置文件 1.RabbitMQ配置文件 2.生产者项目配置文件 3.消费者项目配置文件 二、生产者xml中文件创建队列 三、生产者xml文件中创建交换机以及绑定队列 1、创建交换机 2、绑定队列 四、消费者xml文件中创建…

第五十八章 线段树(一)

第五十八章 线段树&#xff08;一&#xff09;一、树状数组的缺陷二、线段树的作用三、线段树的基本构成1、节点定义2、线段树的结构四、线段树的重要函数1、构造线段树——bulid函数2、查询区间——query函数3、单点修改——modify函数五、例题一、树状数组的缺陷 在前面两个…