I am trying to understand how to extend the idea of one dimensional dynamic time warping to the multidimensional case.

Lets assume I have a dataset with two dimensions where TrainA holds dimension 1 and TrainB holds dimension 2. It seems that the simplest case would be

distA = dtw(TrainA) 
distB = dtw(TrainB) 
dist = distA + distB  // or maybe distA*distB

Is this the right approach? I know there are packages that do this for you but I want to understand what is actually being done.

There are two ways to do it. The way you describe is DTWI, but other way, DTWD can be better, because it pools the information before warping.

There is an explanation of the differences, and an empirical study here. http://www.cs.ucr.edu/~eamonn/Multi-Dimensional_DTW_Journal.pdf

  • 1
    Thank you for the link to the great paper! Do you know if any code exists that will extend the UCR suite (cs.ucr.edu/~eamonn/UCRsuite.html) to allow for DTWD? In case this is Professor Eamonn, I love your work! – mike1886 Jul 31 '15 at 13:19

Your Answer


By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.