如何有效地计算多个时间序列的欧氏距离矩阵

问题描述 投票:0回答:1

我有以下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中可以有更简单且计算效率更高的方法。如果您有任何建议,请告诉我。

如果需要,我很乐意提供更多详细信息。

python numpy euclidean-distance
1个回答
0
投票

您根本不需要循环,因为两个数组之间的欧氏距离只需将差的元素平方计算为:

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
© www.soinside.com 2019 - 2024. All rights reserved.