在Python中加速成对距离矩阵的计算

在Python中加速成对距离矩阵的计算,python,nested-loops,distance,Python,Nested Loops,Distance,我得到了大约9000个轨迹,对于一个项目,我必须计算它们之间的距离。轨迹由11个点组成,每个点包含x和y坐标。只需通过以下方式生成示例数据集: import numpy as np trajs = np.random.rand(9000,11,2) 我从中获取了Frechet距离函数,它以两个轨迹作为输入,输出是一个浮点值 开始时,我编写了一个嵌套for循环: from similaritymeasures import frechet_dist distance_matrix = []

我得到了大约9000个轨迹,对于一个项目,我必须计算它们之间的距离。轨迹由11个点组成,每个点包含x和y坐标。只需通过以下方式生成示例数据集:

import numpy as np
trajs = np.random.rand(9000,11,2)
我从中获取了Frechet距离函数,它以两个轨迹作为输入,输出是一个浮点值

开始时,我编写了一个嵌套for循环:

from similaritymeasures import frechet_dist

distance_matrix = []

for i in trajs:
    for j in trajs:
        distance_matrix.append(frechet_dist(i,j))
结果太长了

由于距离计算是对称的(即frechet_dist(t1,t2)=frechet_dist(t2,t1)),因此我通过以下方式将计算时间减少到上述时间的一半:

from scipy.spatial.distance import squareform

n = len(trajs)
distance_matrix = []
flag = 0
for i in range(n):
    for j in range(flag,n):
        if i != j:
            distance_matrix.append(frechet_dist(trajs[i],trajs[j]))
    flag += 1
dist_mat = squareform(np.asarray(distance_matrix))

现在,对于9000条轨迹,需要19个小时。我得到了结果,但还是太长了。有没有加快计算速度的方法?

是否需要完整的距离矩阵?或者仅仅是极端值。另外,如果你可以使用随机数据生成一个形状相同的矩阵,我们可以更好地帮助你。最初的想法是使用距离矩阵作为相似矩阵来聚类这些轨迹。完整矩阵将作为某些算法(如DBSCAN)的输入。我更新了问题中的示例数据集,谢谢您的帮助!