R 如何快速找到大网格中的最近点

R 如何快速找到大网格中的最近点,r,R,我有一个由1k点(长点和横向点)组成的网格网格 我还有一个10k点的列表(也是长的和横向的)pts 我想找出pts中每个值最接近的网格点 我有一个蛮力算法,但速度很慢: d=NULL for( i in 1:nrow(pts){ for(j in 1:nrow(grid){ d=d,distHaversine(pts[i,2:3],grid[j,2:3])) } } m1=data.frame(matrix(d,ncol=nrow(grid),byrow=1) c=app

我有一个由1k点(长点和横向点)组成的网格
网格

我还有一个10k点的列表(也是长的和横向的)
pts

我想找出pts中每个值最接近的网格点

我有一个蛮力算法,但速度很慢:

d=NULL
for( i in 1:nrow(pts){
    for(j in 1:nrow(grid){
        d=d,distHaversine(pts[i,2:3],grid[j,2:3]))
}
}
m1=data.frame(matrix(d,ncol=nrow(grid),byrow=1)
c=apply(m,2,which.min)
有没有办法加快速度,蛮力是相当缓慢和泰迪乌斯


我使用的是R

distHaversine
是矢量化的,所以您只需要一个循环。当然,您不需要存储所有的距离,只要在每次迭代中保持最小值即可

c = numeric(nrow(pts))
for( i in 1:nrow(pts){
  c[i] = which.min(distHaversine(pts[i, 2:3], grid[, 2:3])
}
上述方法应该有效,而且速度应该更快。如果你 如果您仍想加快速度,可以考虑并行执行迭代