wddtw_distance#
- wddtw_distance(x: ndarray, y: ndarray, window: float = None, g: float = 0.05) float [source]#
Compute the wddtw distance between two time series.
WDDTW was first proposed in [1] as an extension of DDTW. By adding a weight to the derivative it means the alignment isn’t only considering the shape of the time series, but also the phase.
Formally the derivative is calculated as:
\[D_{x}[q] = \frac{{}(q_{i} - q_{i-1} + ((q_{i+1} - q_{i-1}/2)}{2}\]Therefore a weighted derivative can be calculated using D (the derivative) as:
\[d_{w}(x_{i}, y_{j}) = ||w_{|i-j|}(D_{x_{i}} - D_{y_{j}})||\]- Parameters:
- x: np.ndarray, of shape (n_channels, n_timepoints) or (n_timepoints,)
First time series.
- y: np.ndarray, of shape (m_channels, m_timepoints) or (m_timepoints,)
Second time series.
- window: float, defaults=None
The window to use for the bounding matrix. If None, no bounding matrix is used.
- g: float, defaults=0.05
Constant that controls the level of penalisation for the points with larger phase difference. Default is 0.05.
- Returns:
- float
wddtw distance between x and y.
- Raises:
- ValueError
If x and y are not 1D or 2D arrays. If n_timepoints or m_timepoints are less than 2.
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 wddtw_distance >>> x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]]) >>> y = np.array([[42, 23, 21, 55, 1, 19, 33, 34, 29, 19]]) >>> dist = wddtw_distance(x, y)