twe_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray = None, lmbda: float = 1.0, nu: float = 0.001, p: int = 2, **kwargs: Any) float[source]#

Time Warp Edit (TWE) distance between two time series.

The Time Warp Edit (TWE) distance is a distance measure for discrete time series matching with time ‘elasticity’. In comparison to other distance measures, (e.g. DTW (Dynamic Time Warping) or LCS (Longest Common Subsequence Problem)), TWE is a metric. Its computational time complexity is O(n^2), but can be drastically reduced in some specific situation by using a corridor to reduce the search space. Its memory space complexity can be reduced to O(n). It was first proposed in [1].

x: np.ndarray (1d or 2d array)

First time series.

y: np.ndarray (1d or 2d array)

Second time series.

window: float, defaults = None

Float that is the radius of the sakoe chiba window (if using Sakoe-Chiba lower bounding). Value must be between 0. and 1.

itakura_max_slope: float, defaults = None

Gradient of the slope for itakura parallelogram (if using Itakura Parallelogram lower bounding). Value must be between 0. and 1.

bounding_matrix: np.ndarray (2d of size mxn where m is len(x) and n is len(y)),

defaults = None

Custom bounding matrix to use. If defined then other lower_bounding params are ignored. The matrix should be structure so that indexes considered in bound should be the value 0. and indexes outside the bounding matrix should be infinity.

lmbda: float, defaults = 1.0

A constant penalty that punishes the editing efforts. Must be >= 1.0.

nu: float, defaults = 0.001

A non-negative constant which characterizes the stiffness of the elastic twe measure. Must be > 0.

p: int, defaults = 2

Order of the p-norm for local cost.

kwargs: Any

Extra kwargs.


Dtw distance between x and y.


If the sakoe_chiba_window_radius is not a float. If the itakura_max_slope is not a float. If the value of x or y provided is not a numpy array. If the value of x or y has more than 2 dimensions. If a metric string provided, and is not a defined valid string. If a metric object (instance of class) is provided and doesn’t inherit from NumbaDistance. If a resolved metric is not no_python compiled. If the metric type cannot be determined If both window and itakura_max_slope are set



Marteau, P.; F. (2009). “Time Warp Edit Distance with Stiffness Adjustment

for Time Series Matching”. IEEE Transactions on Pattern Analysis and Machine Intelligence. 31 (2): 306–318.


>>> import numpy as np
>>> from sktime.distances import twe_distance
>>> x_1d = np.array([1, 2, 3, 4])  # 1d array
>>> y_1d = np.array([5, 6, 7, 8])  # 1d array
>>> twe_distance(x_1d, y_1d)
>>> x_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])  # 2d array
>>> y_2d = np.array([[9, 10, 11, 12], [13, 14, 15, 16]])  # 2d array
>>> twe_distance(x_2d, y_2d)