DTW简介

article/2025/9/12 11:52:25

dtw算法主要针对序列匹配提出的,尤其是当序列出现一定的飘移,欧氏距离度量就会失效。dtw常用在语音匹配当中,在图像处理里面也有一定的应用。 
现在有两个序列X,Y. 
X=[2,3,4,7,9,2,1,2,1],Y=[1,1,1,1,2,3,3,4,7,8,9,1,1,1,1] 
绘制在坐标轴上如下图 
这里写图片描述 
我们可以看到,两个序列的欧氏距离很大,因为两个序列存在横轴上的飘移。dtw算法就是为了解决此类问题,简单的说dtw算法就是将两个序列在某些时点上压缩,实现两个序列之间的“距离”最小,这里这个距离一般使用欧氏距离。 
dtw算法本质是寻找一条从X[0],Y[0]到X[N],Y[M]的最短的路径。对于上面给出的序列X,Y。找到的压缩路径是[(0, 0), (0, 1), (0, 2), (0, 3), (0, 4), (1, 5), (1, 6), (2, 7), (3, 8), (4, 9), (4, 10), (5, 11), (6, 11), (6, 12), (6, 13), (6, 14), (7, 14), (8, 14)]。对应的压缩关系绘制成图(有点丑,将就看吧) 
这里写图片描述 
说了结果,下面我们来找这个压缩路径。 
这里写图片描述 
这个算法有几个约束,但简而言之就是得从X[0],Y[0]走到X[N],Y[M],即从上图中的左下角走到右上角。 
贪心算法,并不能求得全局最优解,刚开始把这个问题做成了贪心算法,后来想想不太对,就去恶补了动态规划。下面是贪心算法的错误求解。 
每走一步,都是选择距离增加最少的走,并且只有三个方向,向上,向右,向斜对角。这样就保证不会往回走已经走过的路径。假设X,Y构成的N*M的矩阵是距离矩阵D,如上图。那么我们从D[0][0]点走到D[9][14](有9列,14行(这里以列为主序))。那么我们开始计算前几步该如何走,D[0][0]=abs(Y[0]-X[0])=1,,下一步有三个方向,向上D[0][1]=D[0][0]+abs(Y[1]-X[0])=2,向右D[1][0]=D[0][0]+abs(Y[0]-X[1])=3,向斜对角D[1][1]=D[0][0]+abs(Y[1]-X[1])=3。取距离最小,所以选择向上,依次类推,最后得到上图的结果,这就是压缩路径,最终两个序列之间的距离是7。ps:中间可能会遇到向上,向右,像斜上方的距离相等的情况,那么随便选择一个方向即可,路径不一样,但是最终的距离都是相等的。 
按照自己思路写出dtw算法如下,时间复杂度是O(N+M)。

def Distance(x,y):return abs(x-y)
def Dtw(X,Y):Lx=len(X)Ly=len(Y)D=[[sys.maxint for i in range(Lx)]for j in range(Ly)]minD=0j=0k=0path=[(0,0)]for i in range(Lx+Ly):if (j == Ly-1) and (k == Lx-1):breakelif (j==Ly-1) and (k != Lx-1):k += 1D[j][k]=D[j][k-1]+Distance(Y[j],X[k])elif (j != Ly-1) and (k == Lx-1):j += 1D[j][k]=D[j-1][k]+Distance(Y[j],X[k])else:if j==0 and k==0:D[j][k]=Distance(Y[j],X[k])D[j+1][k]=Distance(Y[j+1],X[k])+D[j][k]D[j][k+1]=Distance(Y[j],X[k+1])+D[j][k]D[j+1][k+1]=Distance(Y[j+1],X[k+1])+D[j][k]if(D[j+1][k]<D[j][k+1]):minD=D[j+1][k]if(minD>D[j+1][k+1]):j += 1k += 1else:j += 1else:minD=D[j][k+1]if(minD>D[j+1][k+1]):j += 1k += 1else:k += 1path.append((k,j))minD=D[j][k]return minD,path
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

动态规划 
仔细分析,其实该过程的最优解用dp可以实现,状态转换方程为 
D(i,j)=M[i][j]+min(D[i-1][j],D[i][j-1],D[i-1][j-1])。

def dtw(X,Y):Lx=len(X)Ly=len(Y)path=[]M=[[Distance(X[i],Y[j]) for i in range(Lx)]for j in range(Ly)]D=[[0 for i in range(Lx+1)]for j in range(Ly+1)]D[0][0]=0for i in range(1,Lx+1):D[0][i]=sys.maxintfor j in range(1,Ly+1):D[j][0]=sys.maxintfor i in range(1,Ly+1):for j in range(1,Lx+1):D[i][j]=M[i-1][j-1]+min(D[i-1][j],D[i-1][j-1],D[i][j-1])minD=D[Ly][Lx]return minD

http://chatgpt.dhexx.cn/article/3CwIy1ym.shtml

相关文章

DTW算法

dtw算法主要针对序列匹配提出的&#xff0c;尤其是当序列出现一定的飘移&#xff0c;欧氏距离度量就会失效。dtw常用在语音匹配当中&#xff0c;在图像处理里面也有一定的应用。 现在有两个序列X,Y. X[2,3,4,7,9,2,1,2,1],Y[1,1,1,1,2,3,3,4,7,8,9,1,1,1,1] 绘制在坐标轴上如…

HMM学习笔记_1(从一个实例中学习DTW算法)

DTW为(Dynamic Time Warping,动态时间归准)的简称。应用很广&#xff0c;主要是在模板匹配中&#xff0c;比如说用在孤立词语音识别&#xff0c;计算机视觉中的行为识别&#xff0c;信息检索等中。可能大家学过这些类似的课程都看到过这个算法&#xff0c;公式也有几个&#xf…

DTW(Dynamic Time Warping)动态时间规整——简单易懂

DTW可以用来干什么呢&#xff1f; DWT可以计算两个时间序列的相似度&#xff0c;尤其适用于不同长度、不同节奏的时间序列&#xff08;比如不同的人读同一个词的音频序列&#xff09;。距离越近&#xff0c;相似度越高。 DTW在语音中的运用&#xff1a; 在实际应用中&#xff…

DTW(动态时间归整)算法的前世今生

今天和大家分享一下我刚刚学习到的DTW算法。 主要从以下几个方面进行介绍&#xff1a; 1. DTW算法的提出和应用场景。 2. DTW算法的基本原理和计算过程。 3. DTW算法的具体代码实现。 一、DTW算法的提出和应用场景 Dynamic Time Warping&#xff08;简称&#xff1a;DTW&…

时间序列匹配之dtw的python实现(二)

简介 在上一篇文章里我们介绍了dtw库的使用&#xff0c;但其限制太多&#xff0c;不够灵活&#xff0c;且作图不够方便&#xff0c;因此我们来介绍一个更加复杂的库----dtw-python。它是R语言中dtw实现的python版本&#xff0c;基本的API是对应的&#xff0c;它的优势在于能够…

DTW算法详解

DTW算法详解 1.DTW 1.1 时序相似度 在时间序列数据中&#xff0c;一个常见的任务是比较两个序列的相似度&#xff0c;作为分类或聚类任务的基础。那么&#xff0c;时间序列的相似度应该如何计算呢&#xff1f; “ 经典的时间序列相似性度量方法总体被分为两 类: 锁步度量(lo…

动态时间规整算法(DTW)原理及代码实现

Dynamic Time Warping&#xff08;DTW&#xff09;动态时间规整算法 Dynamic Time Warping&#xff08;DTW&#xff09;是一种衡量两个时间序列之间的相似度的方法&#xff0c;主要应用在语音识别领域来识别两段语音是否表示同一个单词。 1. DTW方法原理 在时间序列中&#…

LOIC网站压力测试工具

官网下载&#xff1a;https://sourceforge.net/projects/loic/ 百度云&#xff1a;https://pan.baidu.com/s/1VVUjLqtq1mMAD-TJIAnhnQ 1.软件解压后运行&#xff0c;界面如图 2.然后可以在url处输入想要测试的网站网址&#xff0c;也可以输入ip地址&#xff0c;输入完之后要…

十大抢手的网站压力测试工具

两天&#xff0c;jnj在本站发布了《如何在低速率网络中测试 Web 应用》&#xff0c;那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具&#xff0c;这样&#xff0c;你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量&#xff0c;以…

10大主流压力测试工具

市面上流行的压力/负载/性能测试工具多是来自国外&#xff0c;近年来国内的性能测试工具也如雨后春笋崛起。同时由于开发的目的和侧重点不同&#xff0c;其功能也有很大差异&#xff0c;下面就为您简单介绍10款目前最常见的测试产品。 1、kylinTOP测试与监控平台&#xff08;商…

jmeter压力测试

一、Jmeter数据库压力测试 1.1.先配置jdbc&#xff08;数据库连接&#xff09;驱动 1、启动jmeter&#xff0c;打开界面工具&#xff0c;添加一个线程组 2、添加一个JDBC Connection Configuration&#xff0c;连接池配置文件。右键线程组【添加】--【配置元件】- -【JDBC Co…

网站压力测试的几种方法

百度TcpCopy&#xff0c;得到的结果是&#xff1a;TCPCopy是一种请求复制&#xff08;所有基于tcp的packets&#xff09;工具&#xff0c;可以把在线流量导入到测试系统中去。曾经应用于网易的广告投放系统&#xff0c;urs系统&#xff0c;nginx hmux协议等系统&#xff0c;避免…

压力测试工具

目录 1 性能测试... 2 2 压力测试&#xff08;Stress Test&#xff09;... 2 2.1 网站测试... 2 2.2 系统测试要求... 3 3 测试工具... 3 3.1 Webbench. 4 3.1.1 Ubuntu 下载安装... 5 3.1.2 w…

开发工具-压力测试工具 ab

开发工具-压力测试工具 ab 写在前面ab工具简介下载 ab使用 ab测试结果报告信息解读 关于 post 请求的压力测试关于需要登录的测试关于报错 写在前面 在学习ab工具之前&#xff0c;我们需了解几个关于压力测试的概念 吞吐率&#xff08;Requests per second&#xff09; 概念&a…

【转】十大抢手的网站压力测试工具

两天&#xff0c;jnj在本站发布了《 如何在低速率网络中测试 Web 应用 》&#xff0c;那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具&#xff0c;这样&#xff0c;你就可以知道你的服务器以及你的WEB应用能够顶得住多少的并发量&#xff…

windows环境压力测试工具Apache ab安装及使用(apache benchmark)

1.首先下载并解压安装包,下载地址Apache Haus Downloads 2.解压到C盘,并进入bin目录,复制路径,并配置环境变量,保存后就OK了 3.可以开始使用了,测试一下吧 ab -n 2000 -c 10 -k http://localhost:6868/dataScreenLibrary/findPublicShareByPk?id4 常用参数详解&#xff1a; …

Jmeter--压力测试工具

前言&#xff1a;Jmeter是一款抗压测试工具&#xff0c;具体是干嘛用的相信在来到这的小伙伴都对它有了一些基本的了解&#xff0c;这里就不做过多的赘述了&#xff0c;本文主要是记录一下Jmeter的下载使用过程是怎么样的~ 一、下载 官网地址&#xff1a;Apache JMeter - Dow…

JMeter压力测试工具

1 简介 JMeter是开源软件Apache基金会下的一个性能测试工具&#xff0c;用来测试部署在服务器端的应用程序的性能。 2 下载安装和启动 JMeter可以在JMeter的官方网站下载(https://jmeter.apache.org/) 官网找到Download 下载zip压缩包后, 解压到本地就行 进入/bin目录, 运…

简单好用的网站压力测试工具

简单好用的网站压力测试工具 下载&#xff1a;https://files.cnblogs.com/files/wordblog/%E5%8E%8B%E5%8A%9B%E6%B5%8B%E8%AF%95%E5%B7%A5%E5%85%B7.rar

网站压测工具Apache-ab,webbench,Apache-Jemeter

网站压测工具Apache-ab&#xff0c;webbench&#xff0c;Apache-Jemeter 1、搭建测试网站2、Apache自带工具ab3、webbench4、Windows下安装Apache-Jmeter 1、搭建测试网站 编译LAMP网站部署&#xff1a;LAMP web1配置&#xff1a; yum方式搭建网站 初始化 cd /etc/yum.repos.…