如何有效地计算Python中n个点的距离

时间:2015-04-15 09:06:26

标签: python performance optimization distance nearest-neighbor

我是Python的新手,目前正在编写一个用于模拟活动球体的python后处理工具。

主要功能是:

counter = 0
for data in itertools.islice(data_iter, begin_timestep, last_timestep-1): #<-- loop over timesteps
    pos = data[:,3:5]
    dx = pos[:,None,:] - pos[None,:,:] #<-- calculation of the distances in 2D
    dx -= extent[None,None,:] * np.floor(0.5  + dx / extent[None,None,:]) #<-- correct for periodic boundaries
    pairwise_distance = np.sqrt(np.sum(dx ** 2.0, axis=-1))
    Q6_2 = calculate_nn_andreas_q2(dx[...,1], dx[...,0], pairwise_distance, 6) #<-- calculate the hexagonal order parameter for each sphere
    mean_Q6_2[counter] = np.mean(Q6_2)
    counter=counter+1

为所有球体计算六边形有序参数(Q6),其中6个最近邻居的位置是必不可少的。

由于此脚本运行时间超过24小时~3000个球体和20k时间步长,我需要对此进行优化。

主要问题是距离(dx)计算。在这里,我只评估2个坐标,因为系统是准2D。 我正在考虑通过在系统上放置网格来优化距离计算,并且仅将相互或相邻的单元中的球体进行比较,因为我只需要6个最近邻居进行Q6计算。有没有一种有效的方法在Python中执行此操作或更好的算法来查找最近的6个邻居?

0 个答案:

没有答案