pyts.metrics.dtw_sakoechiba(x=None, y=None, dist='square', window_size=0.1, precomputed_cost=None, return_cost=False, return_accumulated=False, return_path=False)[source]

Dynamic Time Warping (DTW) distance with Sakoe-Chiba band constraint.

x : array-like, shape = (n_timestamps_1,)

First array. Ignored if dist == 'precomputed'.

y : array-like, shape = (n_timestamps_2,)

Second array. Ignored if dist == 'precomputed'.

dist : ‘square’, ‘absolute’, ‘precomputed’ or callable (default = ‘square’)

Distance used. If ‘square’, the squared difference is used. If ‘absolute’, the absolute difference is used. If ‘precomputed’, precomputed_cost must be the cost matrix. If callable, it must be a function with a numba.njit() decorator that takes as input two numbers (two arguments) and returns a number.

window_size : float or int (default = 0.1)

The window size above and below the diagonale. If float, window_size must be between 0 and 1, and the actual window size will be computed as: ``ceil(window_size * max((n_timestamps_1, n_timestamps_2) - 1))`. If int, window_size must be the largest temporal shift allowed. Each cell whose distance with the diagonale is lower than or equal to ‘window_size’ becomes a valid cell for the path.

precomputed_cost : array-like, shape = (n_timestamps_1, n_timestamps_2) (default = None).

Precomputed cost matrix between the time series. Ignored if dist != 'precomputed'.

return_cost : bool (default = False)

If True, the cost matrix is returned.

return_accumulated : bool (default = False)

If True, the accumulated cost matrix is returned.

return_path : bool (default = False)

If True, the optimal path is returned.

dtw_dist : float

The DTW distance between the two arrays.

cost_mat : array, shape = (n_timestamps_1, n_timestamps_2)

Cost matrix. Only returned if return_cost=True.

acc_cost_mat : array, shape = (n_timestamps_1, n_timestamps_2)

Accumulated cost matrix. Only returned if return_accumulated=True.

path : array, shape = (2, path_length)

The optimal path along the cost matrix. The first row consists of the indices of the optimal path for x while the second row consists of the indices of the optimal path for y. Only returned if return_path=True.


[1]H. Sakoe and S. Chiba, “Dynamic programming algorithm optimization for spoken word recognition”. IEEE Transactions on Acoustics, Speech, and Signal Processing, 26(1), 43-49 (1978).


>>> from pyts.metrics import dtw_sakoechiba
>>> x = [0, 1, 1]
>>> y = [2, 0, 1]
>>> dtw_sakoechiba(x, y, window_size=1)