pairwise_distance#

pairwise_distance(x: ndarray, y: ndarray | None = None, metric: str | Callable[[ndarray, ndarray, dict], Callable[[ndarray, ndarray], float]] | Callable[[ndarray, ndarray], float] | NumbaDistance = 'euclidean', **kwargs: Any) ndarray[源代码][源代码]#

计算两个时间序列之间的成对距离矩阵。

首先,距离度量被’解析’。这意味着传递的度量被解析为一个可调用对象。然后,该可调用对象被调用,参数为 x 和 y,并返回值。接着,对于 x 和 y 的每一种组合,计算它们之间的距离,结果形成一个二维的成对矩阵。

参数:
x: np.ndarray (1d, 2d 或 3d 数组)

第一个时间序列。

y: np.ndarray (1d, 2d 或 3d 数组), 默认 = 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: 任意

度量的额外参数。请参阅每个度量的文档以获取可能的参数列表。

返回:
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.]])