How to get pairwise distance matrices from dynamic time warping dtw on a matrix of time series ?
Afficher commentaires plus anciens
I have a matrix (1018 x 3744) where each column is a timeseries. The timestamps, which are the same for each row, are in a separete vector. Some of the time series contain NaN values at a variety of time points (rows).
1) If there are no NaNs, How can I generate pairwise distance matrices for all of the time series using the dynamic time warping function? I know how to do it for a single pair of time series vectors but not for all of the pairwise combinations in this matrix.
2) How can I do this if there are NaNs?
A subsample of the matrix (the first 10 columns is attached).
Thanks!
Réponses (1)
Greg Dionne
le 2 Mai 2019
Your signals look extremely well time-aligned (within a sample).
Since you have NaN, I suppose you could just perform a weighted comparison over the points you currently have. Maybe something like:
function D = mdist(X)
n = size(X,2);
D = zeros(n);
for i=1:n
for j=i+1:n
idx = isfinite(X(:,i))&isfinite(X(:,j));
D(i,j) = rms(X(idx,i)-X(idx,j));
end
end
D = D+D';
>> mdist(subset)
ans =
0 0.0002 0.0005 0.0009 0.0015 0.0022 0.0030 0.0039 0.0049 0.0059
0.0002 0 0.0003 0.0008 0.0013 0.0021 0.0029 0.0038 0.0047 0.0058
0.0005 0.0003 0 0.0005 0.0010 0.0018 0.0026 0.0035 0.0044 0.0055
0.0009 0.0008 0.0005 0 0.0006 0.0013 0.0021 0.0030 0.0040 0.0051
0.0015 0.0013 0.0010 0.0006 0 0.0007 0.0015 0.0024 0.0034 0.0045
0.0022 0.0021 0.0018 0.0013 0.0007 0 0.0008 0.0017 0.0027 0.0038
0.0030 0.0029 0.0026 0.0021 0.0015 0.0008 0 0.0009 0.0019 0.0030
0.0039 0.0038 0.0035 0.0030 0.0024 0.0017 0.0009 0 0.0010 0.0021
0.0049 0.0047 0.0044 0.0040 0.0034 0.0027 0.0019 0.0010 0 0.0011
0.0059 0.0058 0.0055 0.0051 0.0045 0.0038 0.0030 0.0021 0.0011 0
1 commentaire
Joel Singley
le 6 Mai 2019
Catégories
En savoir plus sur Correlation and Convolution dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!