pairwise_distance#
- pairwise_distance(x: ndarray, y: ndarray = None, metric: str | Callable[[ndarray, ndarray, dict], Callable[[ndarray, ndarray], float]] | Callable[[ndarray, ndarray], float] | NumbaDistance = 'euclidean', **kwargs: Any) ndarray [source]#
计算两个时间序列之间的成对距离矩阵。
首先,距离度量会被“解析”。这意味着传入的度量会被解析为一个可调用对象。然后,该可调用对象会使用 x 和 y 进行调用,并返回计算结果。接着,对于 x 和 y 的每种组合,都会计算值之间的距离,从而得到一个二维成对距离矩阵。
- 参数:
- x: np.ndarray (1维, 2维 或 3维 数组)
第一个时间序列。
- y: np.ndarray (1维, 2维 或 3维 数组), 默认为 None
第二个时间序列。如果未指定,则 y 被设为 x 的值。
- metric: str 或 Callable, 默认为 ‘euclidean’
要使用的距离度量。如果给定字符串,则值必须是以下字符串之一:
‘euclidean’, ‘squared’, ‘dtw’, ‘ddtw’, ‘wdtw’, ‘wddtw’, ‘lcss’, ‘edr’, ‘erp’, ‘msm’
如果可调用,则它必须是距离工厂或 Numba 距离可调用对象。如果想在运行时向距离传递自定义 kwargs,请使用距离工厂,因为它在计算距离之前会使用 kwargs 构建距离。距离可调用对象的格式为(必须是 no_python 编译):Callable[[np.ndarray, np.ndarray], float]
距离工厂的格式为(必须返回一个 no_python 可调用对象):Callable[[np.ndarray, np.ndarray, bool, dict], Callable[[np.ndarray, np.ndarray], float]]。
- kwargs: Any
度量的额外参数。有关可能参数的列表,请参阅各度量的文档。
- 返回值:
- np.ndarray (大小为 mxn 的二维数组,其中 m 为 len(x),n 为 len(y))。
两个时间序列之间的成对距离矩阵。
- 引发的异常:
- ValueError
如果提供的 x 或 y 值不是 numpy 数组。如果 x 或 y 的维度超过 3 维。如果提供的度量字符串不是有效定义的字符串。如果提供的度量对象(类实例)未继承自 NumbaDistance。如果解析的度量未进行 no_python 编译。如果无法确定度量类型。
示例
>>> import numpy as np >>> from sktime.distances import pairwise_distance >>> x_1d = np.array([1, 2, 3, 4]) # 1d array >>> y_1d = np.array([5, 6, 7, 8]) # 1d array >>> pairwise_distance(x_1d, y_1d, metric='dtw') array([[16., 25., 36., 49.], [ 9., 16., 25., 36.], [ 4., 9., 16., 25.], [ 1., 4., 9., 16.]])
>>> 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 >>> pairwise_distance(x_2d, y_2d, metric='dtw') array([[256., 576.], [ 58., 256.]])
>>> x_3d = np.array([[[1], [2], [3], [4]], [[5], [6], [7], [8]]]) # 3d array >>> y_3d = np.array([[[9], [10], [11], [12]], [[13], [14], [15], [16]]]) # 3d array >>> pairwise_distance(x_3d, y_3d, metric='dtw') array([[256., 576.], [ 64., 256.]])
>>> 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 >>> pairwise_distance(x_2d, y_2d, metric='dtw', window=0.5) array([[256., 576.], [ 58., 256.]])