我有以下6个时间序列数据,即t1,t2,t3,t4,t5和t6。
import numpy as np
series = np.array([
[0., 0, 1, 2, 1, 0, 1, 0, 0],
[0., 1, 2, 0, 0, 0, 0, 0, 0],
[1., 2, 0, 0, 0, 0, 0, 1, 1],
[0., 0, 1, 2, 1, 0, 1, 0, 0],
[0., 1, 2, 0, 0, 0, 0, 0, 0],
[1., 2, 0, 0, 0, 0, 0, 1, 1]])
[我想从这6个时间序列中创建一个欧式距离矩阵,格式为(即6 * 6,其中x
表示相应的欧式距离):
t1 t2 t3 t4 t5 t6
t1 0 x x x x x
t2 x 0 x x x x
t3 x x 0 x x x
t4 x x x 0 x x
t5 x x x x 0 x
t6 x x x x x 0
我目前正在按以下方式手动构造此矩阵(在此SO问题中:Efficient and precise calculation of the euclidean distance该方法具有最高的性能)。
例如,计算t3和t6之间的欧式距离。
def eudis(v1, v2):
dist = [(a - b)**2 for a, b in zip(v1, v2)]
dist = math.sqrt(sum(dist))
return dist
eudis(t3, t6)
但是,我确信在python中可以有更简单且计算效率更高的方法。如果您有任何建议,请告诉我。
如果需要,我很乐意提供更多详细信息。
您根本不需要循环,因为两个数组之间的欧氏距离只需将差的元素平方计算为:
def euclidean_distance(v1, v2):
return np.sqrt(np.sum((v1 - v2)**2))
np.allclose(
eudis(series[2], series[3]),
euclidean_distance(series[2], series[3])
)
# True