如何解决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))
所以 x
和 y
的形状分别为 (1000,)
和 (399,)
。我想使用 fastdtw
python 包进行以下两个动态时间扭曲:
-
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,)
。
-
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_warped
与 x
的形状相同,但我希望得到 x.shape=(399,)
。如何将较长的信号变形为较短的信号?
提前致谢!
解决方法
首先,我注意到您使用的是 FastDTW,但是“FastDTW 是近似的,并且通常比它近似的算法慢。”
在用代码回答问题之前,您需要从语义上回答问题。 考虑以下两种情况
-
A= CAT 和 B = CAAAT 在这种情况下,您可以将时间序列插入到相同的长度
-
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 举报,一经查实,本站将立刻删除。