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

时间:2020-09-03 10:10:08

标签: python nested-loops distance

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

import numpy as np
trajs = np.random.rand(9000,11,2)

我从https://pypi.org/project/similaritymeasures/中获取了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个小时。我得到了结果,但是仍然太久了。有什么方法可以加快计算速度?

0 个答案:

没有答案