我拥有:3D框内不同位置的预定义圆圈和粒子(x-y-z坐标中的id和位置)。
我想做的事情:找出每个圆圈的某个半径范围内的所有粒子,并记录它们的ID。
我一直在做的事情:我使用distance.cdist()函数来计算所有粒子的x轴位置和圆圈的每个中心之间的欧氏距离。这是通过循环所有中心并将所有粒子和每个中心之间的距离存储在不同列中来完成的。
我的代码是:
p_h_dx = np.empty((len(p),len(dsel))) #I create an empty array
for i in range(len(dsel)): #looping over all centers
distance = distance.cdist(np.column_stack((p[:,1],p_zeros)),np.column_stack((dsel[:,2][i],0)),'euclidean')
p_h_dx[:,i] = distance.reshape((len(p),))[:]
然后我重复y轴和z轴。最后,我用以下方式计算距离:
###############################################
p_h_dx an array storing the distances between the x-axis positions of all
particles and centers of the circles;
p_h_dy for y-axis and p_h_dz for z-axis
###############################################
p_h_d = np.sqrt(np.power(p_h_dx,2) + np.power(p_h_dy,2) + np.power(p_h_dz,2))
我有超过1亿个粒子和〜3万个圆圈,所以使用我目前的方法,即使使用mpi,也需要~1周才能实现我的目标。我想知道是否有办法更有效地完成这项工作。