Frechet distance距离计算原理及python实现

news2025/7/20 9:27:19

Frechet distance概念

在这里插入图片描述

弗雷彻距离(Frechet distance)定义了一种考虑位置和点的次序的计算两条曲线相似度的方法,常用于时间序列相似度度量和轨迹序列相似度度量。该指标的算法可用the walking dog problem来描述:想象一个人用牵引带遛狗的同时,穿过一条有限弯曲的路径,而狗则穿过一条单独的有限弯曲路径。每个人都可以改变自己的速度来放松牵引带,但都不能向后移动。则两条路径之间的Fréchet距离是牵引带的最短长度,足以让两条弯路从头到尾穿过各自的路径。
严格的数学定义为:
曲线A,B为度量空间S内的两条曲线,即 A : [ 0 , 1 ] → S A:[0,1]\rightarrow S A:[0,1]S, B : [ 0 , 1 ] → S B:[0,1]\rightarrow S B:[0,1]S α \alpha α β \beta β是单位区间的两个重采样函数, α : [ 0 , 1 ] → [ 0 , 1 ] \alpha:[0,1]\rightarrow [0,1] α[0,1][0,1]。弗雷彻距离为: F ( A , B ) = inf ⁡ α , β max ⁡ t ∈ [ 0 , 1 ] ( d ( A ( α ( t ) ) , B ( β ( t ) ) ) ) F(A,B)=\inf_{\alpha,\beta}\max_{t\in[0,1]}(d(A(\alpha(t)),B(\beta(t)))) F(A,B)=α,βinft[0,1]max(d(A(α(t)),B(β(t))))
通俗的数学定义可以简化为:
在这里插入图片描述

代码实现

基于动态规划,求两条轨迹的弗雷彻距离,具体的,将轨迹A和B每步分为三类可能的路径状态,1)A和B都向前移动一步;2)A停留原地,B向前移动一步;3)A向前移动一步,B停留原地;

import numpy as np
from scipy.spatial import distance
from scipy.spatial import minkowski_distance
from scipy.spatial.distance import euclidean
import seaborn as sns
def Frechet_distance(exp_data,num_data):
    """
    cal fs by dynamic programming
    :param exp_data: array_like, (M,N) shape represents (data points, dimensions)
    :param num_data: array_like, (M,N) shape represents (data points, dimensions)
    # e.g. P = [[2,1] , [3,1], [4,2], [5,1]]
    # Q = [[2,0] , [3,0], [4,0]]
    :return:
    """
    P=exp_data
    Q=num_data
    p_length = len(P)
    q_length = len(Q)
    distance_matrix = np.ones((p_length, q_length)) * -1

    # fill the first value with the distance between
    # the first two points in P and Q
    distance_matrix[0, 0] = euclidean(P[0], Q[0])

    # load the first column and first row with distances (memorize)
    for i in range(1, p_length):
        distance_matrix[i, 0] = max(distance_matrix[i - 1, 0], euclidean(P[i], Q[0]))
    for j in range(1, q_length):
        distance_matrix[0, j] = max(distance_matrix[0, j - 1], euclidean(P[0], Q[j]))

    for i in range(1, p_length):
        for j in range(1, q_length):
            distance_matrix[i, j] = max(
                min(distance_matrix[i - 1, j], distance_matrix[i, j - 1], distance_matrix[i - 1, j - 1]),
                euclidean(P[i], Q[j]))
    # distance_matrix[p_length - 1, q_length - 1]
    sns.heatmap(distance_matrix, annot=True)
    return distance_matrix[p_length-1,q_length-1] # 最后一步即为弗雷彻距离

在这里插入图片描述

参考资料

[1] Thomas Eiter and Heikki Mannila. Computing discrete Frechet distance. Technical report, 1994. http://www.kr.tuwien.ac.at/staff/eiter/et-archive/cdtr9464.pdf http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.90.937&rep=rep1&type=pdf
[2] similarity_measures python package
[3] https://en.wikipedia.org/wiki/Fr%C3%A9chet_distance
[4] 通俗的数学描述及动态规划求解

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

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

相关文章

“碳”零排放是什么意思

在气候变化问题上拖拖拉拉之后,澳大利亚联邦政府终于承诺到 2050 年实现净零排放,世界其他大部分地区也是如此。几乎所有发达经济体现在都加强了 2030 年目标,并承诺在本十年将排放量大致减半。 需要记住的重要一点是,如果没有本…

abbyy finereader2023泰比文字识别PDF编辑软件

近年来,随着盲人数字阅读的普及推广,PDF格式的电子书越来越受到大家的关注和喜爱,但受读屏软件功能的限制,扫描版的PDF电子书是无法直接阅读的,这就需要将其转换为可阅读的文档格式,可对于大多数视障读者来…

Linux基本指令1

系统内核:Centos 7.6 64位操作系统(OS, operating system)是什么?世界上第一台计算机诞生的时候是没有操作系统的,但是这个计算机操作起来效率特别低,难度非常高。使用对象只有科学家。操作系统的意义就在于降低操作难度&#…

数据库高级 V

数据库高级 V 1.JVM内存结构,JVM调优,GC常用算法 如何调整堆内存大小,以及调整各年代之间的比例,更换GC 修改JVM堆大小方式: 找到Idea安装目录下的-->bin-->idea.exe.vmoptions -server -Xms128m //堆初始大小 -Xmx512m //最大堆内存 -XX:ReservedCodeCacheSize240m -XX…

[附源码]计算机毕业设计JAVA花卉销售管理系统

[附源码]计算机毕业设计JAVA花卉销售管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybati…

Linux umask命令详解,Linux修改文件默认访问权限

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 umask命令一、查看umask值二、临时修改umask值三、永久修改umask值四、文件和目录的默认权限五、权限数值对照表六、常用umask值及对应权限七…

最近公共祖先(朴素法、倍增法、(递归法))

目录 一、前言 二、题一:二叉树的最近公共祖先 1、上链接 2、基本思路 (1)朴素法 (2)LCA倍增法。 3、朴素法代码 (1)C(AC) (2)python&am…

1.2 极限的性质【极限】

1.2 极限的性质【极限】 1.2.1 唯一性 极限的唯一性 引入 假设警察逮捕罪犯,把犯人追到了悬崖边上,那么犯人只能在悬崖边束手就擒,这个时候悬崖边是犯人逃跑的极限位置,别无去处,位置唯一。 考试或比赛的时候都努…

web前端开发技术纯静态 (12306官网 1页)

⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIVCSS 布局制作,HTMLCSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 | HTML期末大学生网页设计作业,Web大学生网页 HTML:结构 CSS&#…

WebDriverManager自动管理浏览器Driver包

WebDriverManager是什么? WebDriverManager是一个开源 Java 库,它以全自动方式管理(即下载、设置和维护) Selenium WebDriver所需的驱动程序(例如,chromedriver、geckodriver、msededriver 等)…

【ASM】字节码操作 工具类与常用类 Printer、ASMifier、Textifier 介绍

文章目录 1.概述2. Printer2.1 class info2.2 fields2.3 constructors2.4 methods3. ASMifier与Textifier3.1 如何使用3.2 从命令行使用3.3 visit方法3.4 从代码中使用1.概述 在上一篇文章中:【ASM】字节码操作 工具类与常用类 TraceClassVisitor 介绍 我们知道了如何使用Tra…

nodejs+vue+elementui个人图书分享共享网站

本面向图书共享系统主要包括两大功能模块,即用户功能模块和管理员功能模块。 (1)管理员模块:首页、个人中心、图书分类管理、图书信息管理、用户管理、用户分享管理、联系我们、社区交流、系统管理。 (2)用…

多功能电子密码锁的设计与制作

目 录 第一章 绪论 1 1.1 课题背景和意义 1 1.2 多功能电子密码锁发展趋势 2 第二章 总体设计方案的确定 3 2.1 多功能电子密码锁设计的具体要求 3 2.2 总体设计方案选定 3 第三章 系统硬件设计 5 3.1 设计原理 5 3.2 单片机STC89C51简介 5 3.3 AT24C02存储芯片 9 3.4 LCD显示模…

《Deep learning Based Text Classification:A comprehensive Review》文本综述

介绍 深度学习综述年年有,今年特别多。随着深度学习在机器学习领域的快速发展,对每个任务进行算法的总结对于之后的发展是有益的。综述可以梳理发展脉络,对比算法好坏,并为以后的研究方向进行启发。本文是在NLP领域中重要的任务-…

KT148A语音芯片常见问题集锦|硬件|软件以及注意事项-长期更新

目录 1.1KT148A是什么? 具备哪些功能? 有什么特色? 1.2KT148A工作电压多少?电流是多少?控制方式是多少?支持多大的喇叭? 1.3KT148A我焊接到PCB板上面之后,为什么没有任何反应呢&a…

基于动态时间规整算法(DTW)的语音识别技术研究-含Matlab代码

⭕⭕ 目 录 ⭕⭕⏩ 一、引言⏩ 二、动态时间规整算法基本原理⏩ 三、语音识别实例分析⏩ 四、参考文献⏩ 五、Matlab代码获取⏩ 一、引言 在语音识别技术的发展过程中,动态时间规整算法(Dynamic Time Warping,DTW)一直处于重要地…

Mysql

1.约束 2.数据库设计 3.多表查询 4.事物 5.新增/删除/修改语句 6.单表条件查询 7.函数 8.创建数据库/数据表 执行顺序 第一步:from 指定要操作的表 第二步:join 连接表生成一个笛卡尔积 第三步:on 对笛卡尔积进行筛选 第四步&#xff1a…

Pytorch深度学习实战(1)—— 使用LSTM 自动编码器进行时间序列异常检测

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

并发编程面试题

并发 为什么要使用并发编程(并发编程的优点) 并发编程可以提升 CPU 的计算能力的利用率,通过并发编程的形式可以将多核CPU 的计算能力发挥到极致提升程序的性能,如:响应时间、吞吐量、计算机资源使用率等。并发程序可…

Golang 数组基础

数组内部实现和基础功能 了解Go的数据结构,一般会从数组开始,因为数组是切片和映射的基础数据结构。 内部实现 在Go语言中,数组是一个长度固定的数据类型,用于存储一段具有相同的类型的元素连续块。数组的类型是固定统一的&…