gpt4 book ai didi

r - 与地圈 : avoid repeat calculus 的距离矩阵

转载 作者:行者123 更新时间:2023-12-04 11:43:55 25 4
gpt4 key购买 nike

我想使用 distm 计算一个非常大的矩阵中所有点之间的距离来自 geosphere .

看一个最小的例子:

library(geosphere)
library(data.table)

coords <- data.table(coordX=c(1,2,5,9), coordY=c(2,2,0,1))
distances <- distm(coords, coords, fun = distGeo)

问题是,由于我计算的距离的性质, distm给我一个对称矩阵,因此,我可以避免计算一半以上的距离:
structure(c(0, 111252.129800202, 497091.059564718, 897081.91986428, 
111252.129800202, 0, 400487.621661164, 786770.053508848, 497091.059564718,
400487.621661164, 0, 458780.072878927, 897081.91986428, 786770.053508848,
458780.072878927, 0), .Dim = c(4L, 4L))

你能帮我找到一种更有效的方法来计算所有这些距离,避免每次重复两次吗?

最佳答案

如果要计算点 x 的所有成对距离,最好用distm(x)而不是 distm(x,x) . distm函数在两种情况下都返回相同的对称矩阵,但是当您向它传递单个参数时,它知道矩阵是对称的,因此它不会进行不必要的计算。

你可以计时。

library("geosphere")

n <- 500
xy <- matrix(runif(n*2, -90, 90), n, 2)

system.time( replicate(100, distm(xy, xy) ) )
# user system elapsed
# 61.44 0.23 62.79
system.time( replicate(100, distm(xy) ) )
# user system elapsed
# 36.27 0.39 38.05

您还可以查看 geosphere::distm 的 R 代码检查它是否以不同的方式对待这两种情况。

旁白:快速谷歌搜索找到 parallelDist : CRAN 上的并行距离矩阵计算。测地距离是一个选项。

关于r - 与地圈 : avoid repeat calculus 的距离矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54971461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com