我得到了大约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个小时。我得到了结果,但还是太长了。有什么方法可以加快计算速度吗
目前没有回答
相关问题 更多 >
编程相关推荐