微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

fastdtw python 包中具有较短参考时间序列信号的长时间序列信号的动态时间扭曲

如何解决fastdtw python 包中具有较短参考时间序列信号的长时间序列信号的动态时间扭曲

我有以下两个时间序列信号:

import numpy as np
x = np.cos(2*np.pi*np.power(3*(np.linspace(1,1000,1000))/1000,2))
y = np.cos(2*np.pi*(9*(np.linspace(1,399,399))/400))

所以 xy 的形状分别为 (1000,)(399,)。我想使用 fastdtw python 包进行以下两个动态时间扭曲:

  1. x 是参考信号(较长的信号):

我想将 y 映射到更长的信号形状 (x.shape=(1000,))。它由以下代码完成:

from scipy.spatial.distance import euclidean
from fastdtw import fastdtw
distance,path = fastdtw(x,y,dist=euclidean) # x:reference signal
inds = [ind[1] for ind in path]
y_warped = y[inds]

在这种情况下,上面的代码可以正常工作并将 y:(399,) 映射到 y_warped:(1000,)

  1. y 是参考信号(较短的信号):

我想将 x 映射到较短的信号形状 (y.shape=(399,))。

from scipy.spatial.distance import euclidean
from fastdtw import fastdtw
distance,path = fastdtw(y,x,dist=euclidean) # y:reference signal
inds = [ind[1] for ind in path]
x_warped = x[inds]

在这种情况下,我得到的 x_warpedx 的形状相同,但我希望得到 x.shape=(399,)。如何将较长的信号变形为较短的信号? 提前致谢!

解决方法

首先,我注意到您使用的是 FastDTW,但是“FastDTW 是近似的,并且通常比它近似的算法慢。”

在用代码回答问题之前,您需要从语义上回答问题。 考虑以下两种情况

  1. A= CAT 和 B = CAAAT 在这种情况下,您可以将时间序列插入到相同的长度

  2. C = CAT 和 B = CATXXXX 在这种情况下,您需要使用开放式 DTW [b]

[a]https://arxiv.org/abs/2003.11246 [b] https://www.cs.unm.edu/~mueen/DTW.pdf

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。