# wdtw_distance¶

wdtw_distance(x: ndarray, y: ndarray, window: = None, g: float = 0.05, itakura_max_slope: = None) [source]

Compute the WDTW distance between two time series.

First proposed in [1], weighted dynamic time warping (WDTW) uses DTW with a weighted pairwise distance matrix rather than a window. When creating the distance matrix :math:’M’, a weight penalty :math:’w_{|i-j|}’ for a warping distance of :math:’|i-j|’ is applied, so that for series $$a = <a_1, ..., a_m>$$ and $$b=<b_1,...,b_m>$$,

$M_{i,j}= w(|i-j|) (a_i-b_j)^2.$

A logistic weight function, proposed in [1] is used, so that a warping of $$x$$ places imposes a weighting of

$w(x)=\frac{w_{max}}{1+e^{-g(x-m/2)}},$

where $$w_{max}$$ is an upper bound on the weight (set to 1), $$m$$ is the series length and $$g$$ is a parameter that controls the penalty level for larger warpings. The greater $$g$$ is, the greater the penalty for warping. Once $$M$$ is found, standard dynamic time warping is applied.

WDTW is set up so you can use it with a bounding box in addition to the weight function is so desired. This is for consistency with the other distance functions.

Parameters:
Xnp.ndarray

A collection of time series instances of shape (n_cases, n_timepoints) or (n_cases, n_channels, n_timepoints).

ynp.ndarray or None, default=None

A single series or a collection of time series of shape (m_timepoints,) or (m_cases, m_timepoints) or (m_cases, m_channels, m_timepoints). If None, then the wdtw pairwise distance between the instances of X is calculated.

windowfloat, default=None

The window to use for the bounding matrix. If None, no bounding matrix is used.

gfloat, default=0.05

Constant that controls the level of penalisation for the points with larger phase difference. Default is 0.05.

itakura_max_slopefloat, default=None

Maximum slope as a proportion of the number of time points used to create Itakura parallelogram on the bounding matrix. Must be between 0. and 1.

Returns:
float

WDTW distance between x and y.

Raises:
ValueError

If x and y are not 1D or 2D arrays.

References

[1]

Young-Seon Jeong, Myong K. Jeong, Olufemi A. Omitaomu, Weighted dynamic time

warping for time series classification, Pattern Recognition, Volume 44, Issue 9, 2011, Pages 2231-2240, ISSN 0031-3203, https://doi.org/10.1016/j.patcog.2010.09.022.

Examples

>>> import numpy as np
>>> from aeon.distances import wdtw_distance
>>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]])
>>> y = np.array([[11, 12, 13, 14, 15, 16, 17, 18, 19, 20]])
>>> round(wdtw_distance(x, y),1)
356.5