python笔记:dtaidistance

1 介绍

  • 用于DTW的库
  • 纯Python实现和更快的C语言实现

2  DTW举例

2.1 绘制warping 路径

from dtaidistance import dtw
from dtaidistance import dtw_visualisation as dtwvis
import numpy as np
import matplotlib.pyplot as plts1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
path=dtw.warping_path(s1,s2)
dtwvis.plot_warping(s1,s2,path)

path
'''
[(0, 0),(1, 0),(2, 1),(3, 2),(3, 3),(4, 4),(5, 5),(6, 5),(7, 6),(8, 7),(9, 8),(10, 9),(11, 10),(11, 11),(12, 12)]
'''

 2.2 计算dtw距离

s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
dtw.distance(s1,s2)
#1.4142135623730951

2.3 快速版本计算dtw距离

最快的版本(比其他版本快30至300倍)直接使用C语言编写,但需要数组作为输入(使用双精度类型),并且(可选地)通过将max_dist设置为欧几里得距离的上界来剪枝计算

s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
dtw.distance_fast(s1,s2)
#1.4142135623730951s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
dtw.distance_fast(s1,s2,use_pruning=True)
#1.4142135623730951

2.4 降低DTW 复杂度

距离函数具有线性空间复杂度但二次时间复杂度。

  • 为了降低时间复杂度,有多种选择可用。
    • 在DTW实现中最常用的方法是使用一个窗口,表示允许的最大偏移量
      • 这将复杂度降低到窗口大小和最长序列长度的乘积
      • window参数:仅允许偏移量最多为此值远离两条对角线
    • 其他一些选项用于提前停止动态规划算法正在探索的某些或所有路径
      • max_dist:避免计算将大于此值的部分路径。如果找不到小于或等于此值的解决方案,则返回无穷大
      • use_pruning:一种剪枝部分路径的好方法是将最大距离设置为欧几里得上界
      • max_length_diff:果两个序列的长度差大于此值,则返回无穷大

2.5 得到累计成本矩阵并绘制之

s1 = np.array([0., 0, 1, 2, 1, 0, 1, 0, 0, 2, 1, 0, 0])
s2 = np.array([0., 1, 2, 3, 1, 0, 0, 0, 2, 1, 0, 0, 0])
distance,matrix=dtw.warping_paths(s1,s2)
distance
#1.4142135623730951matrix.shape
#(14, 14)

2.5.1 求最佳路径

dtw.best_path(matrix)
'''
[(0, 0),(1, 0),(2, 1),(3, 2),(3, 3),(4, 4),(5, 5),(6, 5),(7, 6),(8, 7),(9, 8),(10, 9),(11, 10),(11, 11),(12, 12)]
'''

这个其实和我们前面的warping_path是一样的

dtw.warping_path(s1,s2)
'''
dtw.warping_path(s1,s2)
'''

2.5.2 可视化结果

dtwvis.plot_warpingpaths(s1,s2,matrix,dtw.warping_path(s1,s2))

2.6 多个时间序列的DTW

  • 要计算列表中所有序列之间的DTW距离度量,可以使用dtw.distance_matrix方法
  • dtw.distance_matrix_fast方法可以加速计算,该方法试图在C语言环境中运行所有算法
from dtaidistance import dtw
import numpy as np
timeseries = [np.array([0, 0, 1, 2, 1, 0, 1, 0, 0], dtype=np.double),np.array([0.0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0]),np.array([0.0, 0, 1, 2, 1, 0, 0, 0])]
ds = dtw.distance_matrix(timeseries)
ds
'''
array([[0.        , 1.41421356, 1.        ],[1.41421356, 0.        , 1.        ],[1.        , 1.        , 0.        ]])
'''

输入为一个列表的列表

2.6.1 compact=True

可以将ds转化成上三角矩阵的值,节省空间

from dtaidistance import dtw
import numpy as np
timeseries = [np.array([0, 0, 1, 2, 1, 0, 1, 0, 0], dtype=np.double),np.array([0.0, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0]),np.array([0.0, 0, 1, 2, 1, 0, 0, 0])]
ds = dtw.distance_matrix(timeseries,compact=True)
ds
#array('d', [1.4142135623730951, 1.0, 1.0])

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

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

相关文章

合并两个有序数组(leetcode_刷题1)

目录 题目:合并两个有序数组 题目分析方向1: 题目分析方向2: 题目:合并两个有序数组 题目要求: 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums…

飞行汽车开发原理(上)

前言 小节的安排是由浅入深,要按顺序读;有电路知识基础的同学可跳到“计算机电路”一节开始。因为知识点之间有网状依赖,没办法按分类来讲。 为了避免过于深入、越讲越懵,很多描述仅为方便理解、不求严谨。 半导体特性 导体&a…

毕业论文及各种办公文件word页码的设置大全

当我们在写论文或者报告的时候,经常需要我们给文档设置页码,用于页码统计,也方便后期的查阅和阅读,但是经常遇到特殊的要求或者情况,比如删除了某个页的页码,那么整个文档目录的页码就会全部被删除&#xf…

Excel——多列合并成一列的4种方法

Excel怎么将多列内容合并成一列? 怎么将多个单元格的内容连接起来放在一个单元格里? 比如下图,要将B、C、D列的内容,合并成E列那样,该怎么做呢? △图1 本文中,高潜老师将给大家介绍 4种 将多…

基于SpringBoot的仓库管理系统设计与实现附带源码和论文

博主24h在线,想要源码文档部署视频直接私聊,全网最低价,9.9拿走! 【关键词】仓库管理系统,jsp编程技术,mysql数据库,SSM,Springboot 目 录 摘 要 Abstract 第1章 绪论 1.1 课题…

分布式搜索引擎(Elastic Search)+消息队列(RabbitMQ)部署

一、分布式搜索引擎:Elastic Search Elastic Search的目标就是实现搜索。是一款非常强大的开源搜索引擎,可以帮助我们从海量数据中快速找到需要的内容。在数据量少的时候,我们可以通过索引去搜索关系型数据库中的数据,但是如果数…

python爬虫混肴DES案例:某影视大数据平台

声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 一、找出需要加密的参数 js运行atob(‘aHR0cHM6Ly93d3cuZW5kYXRhLmNvbS5jbi9Cb3hPZmZpY2UvQk8vTW9udGgvb25lTW9udGguaHRtbA’…

【Vue】将官方路由管理器 vue-router 库引入 Vue 项目的三种方法

前言 Vue Router 是 Vue.js 的官方路由管理器。它可以帮助我们在 Vue 应用中实现页面之间的跳转和导航,并且提供了一些高级功能,如路由参数、路由嵌套、路由守卫等。 Vue Router 的主要作用是将不同的组件映射到不同的 URL,并根据 URL 的变化…

人、机不同在于变与多

人擅长变,如变模态、变尺度,而机器侧重多,如多模态、多尺度。 人类擅长变化的能力是由于我们的大脑和思维能力的灵活性所决定的。我们可以通过学习和适应,改变我们的态度、行为方式和观点,以适应不同的情境和环境。例如…

图像识别经典轻量级网络模型总结梳理、原理解析与优劣对比分析

在前面的很多博文中,我们不止一次提到过,在实际业务项目开发过程中,我们会经常使用到轻量级的网络模型,本文主要是总结梳理前面经常使用到的一些轻量级的图像识别模型。 【MobileNetv1】 MobileNetv1 是一种轻量级的卷积神经网络&…

PYthon数据分析学前导语

文章目录 1.学习计划1.1 第一阶段:数据分析阶段1.2 第二阶段:可视化阶段1.3 第三阶段:项目实战阶段 2. 相关工具库的安装2.1.Pandas与Numpy的安装2.2 matplotlib, seaborn, Pyecharts的安装 1.学习计划 欢迎开始Python数据分析系列博客的学习…

删除误提交的 git commit

背景描述 某次的意外 commit 中误将密码写到代码中并且 push 到了 remote repo 里面, 本文将围绕这个场景讨论如何弥补. 模拟误提交操作 在 Gitee 创建一个新的 Repo, clone 到本地 git clone https://gitee.com/lpwm/myrepo.git创建两个文件, commit 后 push 到 remote 作…

docker 手工redis7.x cluster

IP端口192.168.0.816379/6380192.168.0.826379/6380192.168.0.1146379/6380 mdkir /data/{6379,6380}cat <<END> /data/6379.conf # 端口号 port 6379# 设置客户端连接后进行任何其他指定前需要使用的密码 #requirepass 123456 ## 当master服务设置了密码保护时(用re…

个人作品集

个人作品集 封面设计 排版设计 3D建模 Pr剪辑 个人剪辑作品 场景搭建

Azure Machine Learning - 使用 Azure OpenAI 服务生成文本

使用 Azure OpenAI 服务生成文本 关注TechLead&#xff0c;分享AI全维度知识。作者拥有10年互联网服务架构、AI产品研发经验、团队管理经验&#xff0c;同济本复旦硕&#xff0c;复旦机器人智能实验室成员&#xff0c;阿里云认证的资深架构师&#xff0c;项目管理专业人士&…

金蝶云星空单据编辑界面,不允许批量填充操作

文章目录 金蝶云星空单据编辑界面&#xff0c;不允许批量填充操作案例演示开发设计测试 金蝶云星空单据编辑界面&#xff0c;不允许批量填充操作 案例演示 售后单&#xff0c;明细信息单据体&#xff0c;物料编码字段禁止批量填充。 开发设计 编写表单插件&#xff0c;在Be…

案例052:用于日语词汇学习的微信小程序

文末获取源码 开发语言&#xff1a;Java 框架&#xff1a;SSM JDK版本&#xff1a;JDK1.8 数据库&#xff1a;mysql 5.7 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven3.5.4 小程序框架&#xff1a;uniapp 小程序开发软件&#xff1a;HBuilder X 小程序…

iOS不越狱自动挂机

自动挂机在电脑上或者安卓手机上都相对容易&#xff0c;而在不越狱的iOS设备上还是有点难度的。 此方法不是我原创&#xff0c;详情见&#xff1a; 【苹果党福音&#xff0c;ios也能用的挂机脚本】 https://www.bilibili.com/video/BV1sv4y1P7TL/?share_sourcecopy_web&v…

菜鸟学习日记(python)——条件控制

Python 中的条件语句是通过一条或多条语句的执行结果&#xff08;True 或者 False&#xff09;来决定执行的代码块。 它的一般格式为&#xff1a;if...elif...else if condition1: #条件1CodeBlock1 #代码块1 elif condition2:CodeBlock2 else:CodeBlock3 如果con…

利大于弊:物联网技术对电子商务渠道的影响

For Better or For Worse: Impacts of IoT Technology in e-Commerce Channel 物联网技术使用传感器和其他联网设备来手机和共享数据&#xff0c;并且被视为一种可以为供应链成员带来巨大的机会的突破性技术。本文的研究背景是&#xff1a;一个提供物联网基础设备的电子商务平…