DTW(动态时间归整)算法与DTW,fastDTW的python算例

DTW算法思路

论文地址:https://irit.fr/~Julien.Pinquier/Docs/TP_MABS/res/dtw-sakoe-chiba78.pdf
算法思路:

  1. 计算两个序列不同位置点对应的距离,构成一个矩阵
  2. 在矩阵中找到序列的起始位置对应的单元格,与最后一个单元格
  3. 从这个格子开始,找一条路径,从开始到结尾,使路径上单元格值加总最小

DTW算例

原生代码计算

Github地址:https://github.com/pierre-rouanet/dtw

import numpy as np
from dtw import dtw

x = np.array([2, 0, 1, 1, 2, 4, 2, 1, 2, 0])
y = np.array([1, 1, 2, 4, 2, 1, 4, 2])
manhattan_distance = lambda x, y: np.abs(x - y)

d, cost_matrix, acc_cost_matrix, path = dtw(x, y, dist=manhattan_distance)
print(d)

返回值中:
d:总距离值
cost_matrix:所有点的距离矩阵
acc_cost_matrix:累加的距离值
path:最短路径对应的坐标,为tuple类型的数据

dtaidistance库计算DTW

为了加速DTW运算,可以使用第三方库dtaidistance

dtaidistance github页面:https://github.com/wannesm/dtaidistance

dtaidistance 文档首页:https://dtaidistance.readthedocs.io/en/latest/usage/dtw.html

from dtaidistance import dtw
import numpy as np

s1 = np.array([0, 0, 1, 2, 1, 0, 1, 0, 0], dtype=np.float)
s2 = np.array([0, 1, 2, 0, 0, 0, 0, 0, 0], dtype=np.float)
d = dtw.distance_fast(s1, s2, use_pruning=True)

fastDTW算例

paper:http://cs.fit.edu/~pkc/papers/tdm04.pdf
算例来自官网:

import numpy as np
from scipy.spatial.distance import euclidean

from fastdtw import fastdtw

x = np.array([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5]])
y = np.array([[2, 2], [3, 3], [4, 4]])
distance, path = fastdtw(x, y, dist=euclidean)
print(distance)

返回值中:
distance:距离值
path:最短路径对应的坐标,为list(tuple)类型的数据

参考资料

WikiMapia :https://en.wikipedia.org/wiki/Dynamic_time_warping
时间序列相似性度量综述:https://zhuanlan.zhihu.com/p/69170491
HMM学习笔记_1(从一个实例中学习DTW算法):https://www.cnblogs.com/tornadomeet/archive/2012/03/23/2413363.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值