算法笔记:Frechet距离度量

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

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博客

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

考研复试确认神操作!

终于进行到了研究生考试的尾声&#xff0c;但让考生感到无力吐槽的事情&#xff0c;却还在继续上演&#xff0c;比如苏科大&#xff0c;再比如中地大、苏大&#xff0c;三所学校的神操作&#xff0c;着实让无数考生忍不住调侃&#xff1a;原来考研不仅拼实力&#xff0c;还得拼…

你的APP内存还在暴增吗?试着用Bitmap管理下内存~

作者&#xff1a;layz4android 相信伙伴们在日常的开发中&#xff0c;一定对图片加载有所涉猎&#xff0c;而且对于图片加载现有的第三方库也很多&#xff0c;例如Glide、coil等&#xff0c;使用这些三方库我们好像就没有啥担忧的&#xff0c;他们内部的内存管理和缓存策略做的…

如何实现Chatgpt写文章(附chatgpt3.5免费接口)

申明&#xff1a;本次只是说一下实现思路&#xff0c;官方的接口以及如何实现方式&#xff0c;本文没有提及&#xff0c;这次只是一个思路&#xff0c;若想代替人工完成质量还差的很远&#xff0c;请审核大大放行 今天再次优化了代码&#xff0c;修复了一些bug&#xff0c;考虑…

VUE 学习笔记(一)开发环境搭建

1、Visual Studio Code安装及使用 下载地址官网&#xff1a;https://code.visualstudio.com/ 直接点击下载按钮即可&#xff0c;会根据系统自动下载合适的版本&#xff0c;无需自行选择。 2、VSCode 上安装&#xff1a;JavaScript Debugger 目前 Debugger for Chrome 已经处…

使用向量机(SVM)算法的推荐系统部署实现

包括3个模块&#xff1a;数据预处理、模型训练及保存、模型测试&#xff0c;下面分别给出各模块的功能介绍及相关代码。 数据集下载链接为https://www.aitechclub.com/data-detail? data_id29&#xff0c;停用词典下载链接为http://www.datasoldier.net/archives/636。 1.数…

232:vue+openlayers选择左右两部分的地图,不重复,横向卷帘

第232个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+openlayers项目中自定义js实现横向卷帘。这个示例中从左右两个选择框中来选择不同的地图,做了不重复的处理,即同一个数组,两部分根据选择后的状态做disabled处理,避免重复选择。 直接复制下面的 vue+openlayers…

c语言—指针进阶

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持&#xff01;ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ…

第13届蓝桥杯省赛真题剖析-2022年4月17日Scratch编程初中级组

[导读]&#xff1a;超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成&#xff0c;后续会不定期解读蓝桥杯真题&#xff0c;这是Scratch蓝桥杯真题解析第122讲。 第13届蓝桥杯省赛举办了两次&#xff0c;这是2022年4月17日举行的第一次省赛&#xff0c;比赛仍然采取线上形…

ChatGPT技术原理、研究框架,应用实践及发展趋势(附166份报告)

​ 一、AI框架重要性日益突显&#xff0c;框架技术发展进入繁荣期&#xff0c;国内AI框架技术加速发展&#xff1a; 1、AI框架作为衔接数据和模型的重要桥梁&#xff0c;发展进入繁荣期&#xff0c;国内外框架功能及性能加速迭代&#xff1b; 2、Pytorch、Tensorflow占据AI框…

因果推断14--DRNet论文和代码学习

目录 论文介绍 代码实现 DRNet ReadMe 因果森林 论文介绍 因果推断3--DRNet&#xff08;个人笔记&#xff09;_万三豹的博客-CSDN博客 摘要&#xff1a;估计个体在不同程度的治疗暴露下的潜在反应&#xff0c;对于医疗保健、经济学和公共政策等几个重要领域具有很高的实…

GFD563A101 3BHE046836R0101

GFD563A101 3BHE046836R0101 ABB 7寸触摸屏 PP874K 3BSE069273R1 控制面板 原装进口 ABB 7寸触摸屏 PP874M 3BSE069279R1 黑色坚固 船用认证面板 ABB AC 800M PM865K01 处理器单元 3BSE031151R6 PLC库存 ABB AC 800M控制器模块 PM861AK01 3BSE018157R1 PM861A ABB AC 800PEC PC…

Kafka系统整理 一

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

实验二 图像空间域频率域滤波

一&#xff0e;实验目的&#xff1a; 1. 模板运算是空间域图象增强的方法&#xff0c;也叫模板卷积。 &#xff08;1&#xff09;平滑&#xff1a;平滑的目的是模糊和消除噪声。平滑是用低通滤波器来完成&#xff0c;在空域中全是正值。 &#xff08;2&#xff09;锐化&…

Centos7安装部署Jenkins

Jenkins简介&#xff1a; Jenkins只是一个平台&#xff0c;真正运作的都是插件。这就是jenkins流行的原因&#xff0c;因为jenkins什么插件都有 Hudson是Jenkins的前身&#xff0c;是基于Java开发的一种持续集成工具&#xff0c;用于监控程序重复的工作&#xff0c;Hudson后来被…

【如何使用Arduino控制WS2812B可单独寻址的LED】

【如何使用Arduino控制WS2812B可单独寻址的LED】 1. 概述2. WS2812B 发光二极管的工作原理3. Arduino 和 WS2812B LED 示例3.1 例 13.2 例 24. 使用 WS2812B LED 的交互式 LED 咖啡桌4.1 原理图4.2 源代码在本教程中,我们将学习如何使用 Arduino 控制可单独寻址的 RGB LED 或 …

教育大数据总体解决方案(3)

为区县教育局提供标准制定、流程把控、实施监控、决策支持等服务&#xff0c;支持在全市统一的评价指标体系基础上&#xff0c;为各个区县提供个性化定制功能&#xff0c;各县能够在市统一评价指标体系内任意调整、增加二三级评价指标项&#xff0c;并可以调整对应指标项的分数…

SpringBoot 介绍

1.简介 SpringBoot最开始基于Spring4.0设计&#xff0c;是由Pivotal公司提供的框架。 SpringBoot发展史&#xff1a; 2003年Rod Johnson成立Interface公司&#xff0c;产品是SpringFramework2004年&#xff0c;Spring框架开源&#xff0c;公司改名为Spring Source2008年&…

我的面试八股(Java集合篇)

Java集合 两个抽象接口派生&#xff1a;一个是Collection接口,存放单一元素&#xff1b;一个是Map接口存放键值对。 Vector为什么是线程安全 简单&#xff0c;因为官方在可能涉及到线程不安全的操作都进行了synchronized操作&#xff0c;就自身源码就给你加了把锁。 Vector…

走进Vue【三】vue-router详解

目录&#x1f31f;前言&#x1f31f;路由&#x1f31f;什么是前端路由&#xff1f;&#x1f31f;前端路由优点缺点&#x1f31f;vue-router&#x1f31f;安装&#x1f31f;路由初体验1.路由组件router-linkrouter-view2.步骤1. 定义路由组件2. 定义路由3. 创建 router 实例4. 挂…

【Spark】RDD缓存机制

1. RDD缓存机制是什么&#xff1f; 把RDD的数据缓存起来&#xff0c;其他job可以从缓存中获取RDD数据而无需重复加工。 2. 如何对RDD进行缓存&#xff1f; 有两种方式&#xff0c;分别调用RDD的两个方法&#xff1a;persist 或 cache。 注意&#xff1a;调用这两个方法后并不…