【发布时间】:2016-05-24 07:30:06
【问题描述】:
我正在计算球体上大量位置 (5000) 之间的距离矩阵(使用 Haversine 距离函数)。
这是我的代码:
require(geosphere)
x=rnorm(5000)
y=rnorm(5000)
xy1=cbind(x,y)
计算距离矩阵的时间为
system.time( outer(1:nrow(xy1), 1:nrow(xy1), function(i,j) distHaversine(xy1[i,1:2],xy1[j,1:2])))
执行此程序所需的时间很长。任何建议如何降低完成这项工作的时间!谢谢。
【问题讨论】:
-
您可以尝试另一种实现方式。见r-bloggers.com/…
-
@Leo 良心良心,无意冒犯我必须指出链接的文章是糟糕!作者使用
for循环循环一个向量来重复调用一个已经vectorized的函数(distHaversine())!!他们编写了 更多 代码,同时还将执行速度降低了大约 300 倍!!!不要看这篇文章!你不会调用一个函数 10,000 次,而一次就可以了! -
嗨@SimonO'Hanlon,感谢您的提醒。 :-)