对列表/数组进行排序的最有效方法(计算三维空间中对象之间的距离)



我有一个numpy数组,它由以下对象组成:

class A:
def __init__(self, location, otherAttributes...):
self.location = location
self.otherAttributes...
arrayToSort = np.array([many times of type A], dtype=A)

其中,location是一个具有浮点数location = [X, Y, Z]的列表,表示三维空间中的位置。

在程序的每次迭代中,都需要获得对象之间的距离。此外,在每次迭代中,对象的位置都会发生变化,如果对象彼此在一定范围内,事情就会发生。我的想法是在每次迭代后对数组进行排序,以快速(O(log(n((搜索特定范围内的其他对象。

这是最好的方法吗?如果是,先按X,然后按Y,再按Z对数组进行排序的最快方法是什么?在另一个线程中,建议使用operator.itemgetter / operator.attrgetter来避免不必要的函数调用,但我真的不知道这在这种情况下会如何应用,这在这里甚至有意义。

非常感谢。

尝试将空间拆分为预定义大小的立方体。然后为每个对象添加一个属性,指示它属于哪个立方体(这是一个基于每个坐标值的简单计算(。最后,如果需要,只计算相邻立方体中对象之间的距离。这是一种非常基本的地理哈希类型,但可能会有所帮助。

最新更新