Dynamic Time Warping with Python
Dynamic Time Warping (DTW) is a method to align two sequences such that they have minimum distance. For instance, two trajectories that are very similar but one of them performed in a longer time. Here is an example of my code with python. Here is my ROS package with C++ for DTW.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
import numpy as np import matplotlib.pyplot as plt from scipy.spatial.distance import euclidean from fastdtw import fastdtw start=0 end=2*np.pi step=0.1 k=2 x1=np.arange(start,end,k*step) x2=np.arange(start,end/k,step) noise=np.random.uniform(start,end,len(x2))/10 y1=np.sin(x1)+1*np.sin(2*x1)+noise y2=np.sin(k*x2)+1*np.sin(k*2*x2) sin1=plt.plot(x1,y1) plt.setp(sin1,color='b',linewidth=2.0) sin2=plt.plot(x2,y2) plt.setp(sin2,color='r',linewidth=2.0) time_series_A=zip(x1,y1) time_series_B=zip(x2,y2) distance, path = fastdtw(time_series_A, time_series_B, dist=euclidean) print distance print path index_a,index_b=zip(*path) for i in index_a: x1=time_series_A[i][0] y1=time_series_A[i][1] x2=time_series_B[i][0] y2=time_series_B[i][1] plt.plot([x1, x2], [y1, y2], color='k', linestyle='-', linewidth=2) plt.show() |
Dynamic Time Warping with Python Read More »