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

article/2025/9/12 12:57:06

简介

在上一篇文章里我们介绍了dtw库的使用,但其限制太多,不够灵活,且作图不够方便,因此我们来介绍一个更加复杂的库----dtw-python。它是R语言中dtw实现的python版本,基本的API是对应的,它的优势在于能够自定义点的匹配模式,约束条件,和滑动窗口。同时提供方便的作图和快速的计算(C语言的内核),官方文档点击这里。

示例

本次两条时间序列依然选择上一篇文章中的序列:

import numpy as np
from dtw import *
x=[2., 0., 1., 1., 2., 4., 2., 1., 2., 0.]
y=[1., 1., 2., 4., 2., 1., 2., 0.]

需要注意的是这个库里作图默认用的是浮点数,所以这里我们用float类型初始化,如果用int整型会导致计算错误,就像下图:
在这里插入图片描述
会发现左上角出现了1e18的y轴百分比,其中的黑线变成了长长的平直线。
我调试了好久才发现是int和float的问题。
接下来具体讲解计算和作图:

ds = dtw(y, x,keep_internals=True, step_pattern=asymmetric)
ds.plot(type="twoway",offset=-2)

第一行代码进行了计算生成了一个dtw对象,可以通过对象的各个属性获得内容,比如ds.distance显示计算出的最短距离,ds.reference显示的是模板序列的值,ds.query显示的是查询序列的值,ds.index1ds.index2分别显示各自序列的对应顺序,这里不赘述了。我们在这里只需要知道我们的y是query(查询)序列,x是template(模板)序列,我们把y去匹配x。
再来讲解括号里的参数,x,y不用说了,为了全面,我们补上其他的参数:

dtw.dtw(x, y=None, dist_method='euclidean', step_pattern='symmetric2', window_type=None, window_args={}, keep_internals=False, distance_only=False, open_end=False, open_begin=False)

dist_method 定义你用的距离方法,默认为’euclidean’,即欧几里得距离。
keep_internals=True保存内部的信息包含距离矩阵之类的,一般我们把它设为True。
step_pattern定义了点之间的匹配模式,有好几种,具体查看官网。
window_type表示全局条件约束,也有几种模式,同查看官网。
distance_only如果设置为True,会加速计算,只计算距离,忽略匹配函数。
open_end和open_begin设为True表示无拘束的匹配,即完全的部分匹配,默认是全局匹配,就是严格对应头和尾。
第二行代码是作图代码,其中的type表示了图的模式,一般有twowaythreeway两种模式,下面详解,offset=-2可以理解为两根线之间的分离程度,为了方便看清可以设的大一些。
上面代码生成的图片如下:
在这里插入图片描述
在这幅图中可以看到头和尾进行了严格的匹配,图中黑线表示query序列,蓝线代表template序列,虚线代表点的匹配,我们可以发现在’asymmetric’(step_pattern)模式下,虽然头和尾匹配好了,但是中间的一些点被忽略了。它是什么样的匹配形式呢,我们可以打印出来看一看:

print(asymmetric)
asymmetric.plot()

在这里插入图片描述
在这里插入图片描述
老实说,我也看不太懂,不过看不懂没关系啊,我们可以对比一下,是吧。

ds = dtw(y, x,keep_internals=True, step_pattern=symmetric1)
ds.plot(type="twoway",offset=-2)

把step_pattern换成symmetric1,作图如下:
在这里插入图片描述
我们可以发现图中的点这次得到了一一对应,看看symmetric1的模式图:

print(symmetric1)
symmetric1.plot()

在这里插入图片描述
显然这个模式和之前的asy不对称模式相比显得更加灵活(有上,左下,下三个方向),这应该就是点能一一对应的原因吧。
同时我们来看看另一种图:

ds.plot(type="threeway",offset=-2)

在这里插入图片描述
在threeway模式下画出的图和我们上一篇文章的图就很相似了,可以看到从纵轴从第二个点开始就一一匹配了。
既然asymmetric不能全局匹配,那么它能不能部分匹配呢?其实是可以的,用我们之前说明的open_end和open_begin参数:

ds = dtw(y, x,keep_internals=True, step_pattern=asymmetric,open_begin=True,open_end=False)
ds.plot(type="twoway",offset=-2)

因为x序列实际上是y序列的除去开头的序列,所以我们把open_begin设为True,这也就意味着我们放开了头的限制,可以使开头任意匹配,在这种情况下作图:
在这里插入图片描述
可以发现它完成了局部匹配。

总结

本文主要介绍了dtw-python库的作图功能,其中窗口定义,距离函数定义这些还没有涉及,希望读者能够自行探索补充,这个库除了int型计算错误的重大bug之外,其他还是比较完善的。至此,对dtw的探索暂时告一段落,欢迎读者留言讨论。

1.https://dynamictimewarping.github.io/py-api/html/api/dtw.dtw.html#dtw.dtw
2.https://dynamictimewarping.github.io/py-api/html/api/dtw.StepPattern.html#dtw.StepPattern
3.https://dynamictimewarping.github.io/
4.https://www.jstatsoft.org/article/view/v031i07


http://chatgpt.dhexx.cn/article/SgQYijAi.shtml

相关文章

DTW算法详解

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

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

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

LOIC网站压力测试工具

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

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

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

10大主流压力测试工具

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

jmeter压力测试

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

网站压力测试的几种方法

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

压力测试工具

目录 1 性能测试... 2 2 压力测试(Stress Test)... 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工具之前,我们需了解几个关于压力测试的概念 吞吐率(Requests per second) 概念&a…

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

两天,jnj在本站发布了《 如何在低速率网络中测试 Web 应用 》,那是测试网络不好的情况。而下面是十个免费的可以用来进行Web的负载/压力测试的工具,这样,你就可以知道你的服务器以及你的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 常用参数详解: …

Jmeter--压力测试工具

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

JMeter压力测试工具

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

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

简单好用的网站压力测试工具 下载: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,webbench,Apache-Jemeter 1、搭建测试网站2、Apache自带工具ab3、webbench4、Windows下安装Apache-Jmeter 1、搭建测试网站 编译LAMP网站部署:LAMP web1配置: yum方式搭建网站 初始化 cd /etc/yum.repos.…

10大主流压力测试工具推荐

在移动应用和Web服务正式发布之前,除了进行必要的功能测试和安全测试,为了保证互联网产品的服务交付质量,往往还需要做压力/负载/性能测试。然而很多传统企业在试水互联网的过程中,往往由于资源或产品迭代速度等原因忽视了这一块工…

Linux中Makefile详细教程

目录 Makefile Makefile的介绍 Makefile简单的编写 .PHONY 问题: 如果只执行make,它执行的是Makefile里哪一段语句呢? 怎么知道我的可执行程序是最新的呢? Makefile编译多个文件 进度条小程序 Makefile Makefile的介绍 …

Makefile入门教程

转载&#xff1a; https://www.linuxidc.com/Linux/2014-08/105304.htm Makefile入门教程 回顾 首先&#xff0c;我把需要的文件全部写出来&#xff08;在《GCC学习笔记》处&#xff09;。 main.c文件 #include <stdio.h> #include "math.h" int main() { int…

Makefile教程(入门介绍)

文章目录 前言一、Makefile介绍二、make和Makefile的关系三、学习makefile的意义四、编写一个简单的Makefile总结 前言 本篇文章将带大家学习Makefile&#xff0c;Makefile在文件的编译中起到重要作用&#xff0c;在Linux中我们也是经常使用到Makefile&#xff0c;下面我将会带…

VCS使用Makefile教程

在从事IC验证工作的过程中&#xff0c;其实最开始的一步不是写什么test plan或者说verification of structure&#xff0c;而是应该知道makefile怎么写&#xff0c;先写出一个通用&#xff0c;基础的编译仿真脚本&#xff0c;可能会让你编译仿真轻松一点。 这份Makefile使用教程…