erp_distance(x: ndarray, y: ndarray, window: float | None = None, itakura_max_slope: float | None = None, bounding_matrix: ndarray | None = None, g: float = 0.0, **kwargs: Any) float[source]#

Compute the Edit distance for real penalty (ERP) distance between two series.

ERP, first proposed in [1], attempts align time series by better considering how indexes are carried forward through the cost matrix. Usually in the dtw cost matrix, if an alignment can’t be found the previous value is carried forward. Erp instead proposes the idea of gaps or sequences of points that have no matches. These gaps are then punished based on their distance from ‘g’.

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.

g: float, defaults = 0.

The reference value to penalise gaps.

kwargs: Any

Extra kwargs.


ERP 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 3 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 the metric type cannot be determined If g is not a float. If both window and itakura_max_slope are set



Lei Chen and Raymond Ng. 2004. On the marriage of Lp-norms and edit distance.

In Proceedings of the Thirtieth international conference on Very large data bases
  • Volume 30 (VLDB ‘04). VLDB Endowment, 792–803.


>>> import numpy as np
>>> from sktime.distances import erp_distance
>>> x_1d = np.array([1, 2, 3, 4])  # 1d array
>>> y_1d = np.array([5, 6, 7, 8])  # 1d array
>>> erp_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
>>> erp_distance(x_2d, y_2d)