【发布时间】:2013-03-29 01:15:04
【问题描述】:
假设我有一组 2D 坐标,它们代表 2D 规则网格的单元格的中心。我想为网格中的每个单元格找到每个方向上最近的两个邻居。
如果给每个单元格和索引分配如下定义,问题就很简单了:
idx_cell = idx+N*idy
其中 N 是网格中的单元格总数,idx=x/dx 和 idy=y/dx,其中 x 和 y 是单元格的 x 坐标和 y 坐标,dx 是其大小。
例如,idx_cell=5 的单元格的相邻单元格是 idx_cell 等于 4,6(对于 x 轴)和 5+N,5-N(对于 y 轴)的单元格。
我遇到的问题是我的算法实现对于大型 (N>1e6) 数据集非常慢。
例如,要获取 x 轴的邻居,我会这样做
[x[(idx_cell==idx_cell[i]-1)|(idx_cell==idx_cell[i]+1)] for i in cells]
你认为有最快的方法来实现这个算法吗?
【问题讨论】:
-
我认为你可以通过使用 NumPy 花式索引来加速它。你能发布更多创建
idx, idy, cells, idx_cells,x的代码吗? -
你也可以使用 scipy 的 cKDTree。 docs.scipy.org/doc/scipy/reference/generated/…
-
谢谢,我已经尝试过使用 KDTree,但是对于我的数据集来说它相当慢,而且对于网格来说也不方便。不幸的是,我无法发布更多代码,因为我的数据集很大。