假设我有一组二维坐标,它们代表二维规则网格的单元中心。我想找出,对于网格中的每个单元,每个方向上的两个最近的邻居。在
如果将每个单元格和索引分配给如下定义,则问题非常简单:
idx_cell=idx+N*ide
其中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]
你认为有没有最快的方法来实现这个算法?在
您基本上是在重新设计多维数组的索引方案。编写代码相对容易,但是您可以在这里使用两个函数^{} 和{a2}。在
如果网格包含},可以执行以下操作:
M
行和N
列,要获得单个项目的idx
和{如果您提供一个索引数组而不是单个索引,则此方法也有效:
^{pr2}$因此,如果
^{3}$cells
有多个单元格的索引,则您希望找到其邻居:你可以让他们的邻居:
或者,如果你喜欢这样:
这样做的好处是
ravel_multi_index
有一个mode
关键字参数,可以用来处理晶格边缘上的项,请参阅文档。在相关问题 更多 >
编程相关推荐