【发布时间】:2014-05-08 09:20:14
【问题描述】:
我在二维空间中有一组点,需要计算每个点到其他点的距离。
我的点数相对较少,可能最多 100 个。但由于我需要经常快速地执行此操作以确定这些移动点之间的关系,而且我知道迭代这些点可以与 O(n^2) 复杂度一样糟糕,我正在寻找利用 numpy 的矩阵魔法(或 scipy)的方法。
在我的代码中,每个对象的坐标都存储在它的类中。但是,当我更新类坐标时,我也可以在一个 numpy 数组中更新它们。
class Cell(object):
"""Represents one object in the field."""
def __init__(self,id,x=0,y=0):
self.m_id = id
self.m_x = x
self.m_y = y
我想到创建一个欧几里得距离矩阵来防止重复,但也许你有一个更聪明的数据结构。
我也对漂亮算法的指针持开放态度。
另外,我注意到有类似的问题涉及欧几里得距离和 numpy,但没有找到任何直接解决有效填充完整距离矩阵的问题。
【问题讨论】:
-
在这里,这可能会有所帮助:scipy.spatial.distance.pdist
-
无论如何,复杂度都将是 O(n^2):对于一组一般点,您能做的最好的事情就是只计算
n * (n - 1) / 2距离,这仍然是 O(n^ 2). -
如果
scipy可以用,考虑scipy.spatial.distance_matrix
标签: python numpy matrix performance euclidean-distance