本文介绍: 最快的版本(比其他版本快30至300倍)直接使用C语言编写,但需要数组作为输入(使用双精度类型),并且(可选地)通过将max_dist设置为欧几里得距离的上界来剪枝计算。这个其实和我们前面的warping_path是一样的。距离函数具有线性空间复杂度但二次时间复杂度。可以将ds转化成上三角矩阵的值,节省空间。输入为一个列表的列表。
1 介绍
2 DTW举例
2.1 绘制warping 路径
from dtaidistance import dtw
from dtaidistance import dtw_visualisation as dtwvis
import numpy as np
import matplotlib.pyplot as plt
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])
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.4142135623730951
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,use_pruning=True)
#1.4142135623730951
2.4 降低DTW 复杂度
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.4142135623730951
matrix.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)]
'''
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
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
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])
原文地址:https://blog.csdn.net/qq_40206371/article/details/134818142
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.7code.cn/show_48636.html
如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。