gpt4 book ai didi

r - 在 R 中有效地插入来自网格的值

转载 作者:行者123 更新时间:2023-12-04 11:56:03 24 4
gpt4 key购买 nike

我有一个按位置划分的海洋深度数据网格,并且正在尝试为选择的 GPS 点插入深度值。

我们一直在使用 RSAGA::pick.from.points,它适用于小数据集。

require(RSAGA)

depthdata <- cbind.data.frame(x=c(74.136, 74.135, 74.134, 74.133, 74.132, 74.131, 74.130, 74.129, 74.128, 74.127),
y=rep(40, times=10),
depth=c(-0.6, -0.6, -0.9, -0.9, -0.9, -0.9, -0.9, -0.9, -0.6, -0.6))

mylocs <- rbind(c(-74.1325, 40), c(-74.1305, 40))
colnames(mylocs) <- c("x", "y")

results <- pick.from.points(data=mylocs, src=depthdata, pick=c("depth"), method="nearest.neighbour")
mydepths <- results$depth

但是我们的深度数据集包含 6900 万个数据点,我们有 500 万个 GPS 点需要深度估计,而 pick.from.points 对这个数据集花费的时间太长(> 2 周)。我们认为我们可以在 MATLAB 或 ArcMap 中更快地完成这项任务,但我们正在尝试将此任务合并到 R 中更长的工作流中,我们正在编写供其他人重复运行的工作流,因此切换到专有软件以用于部分该工作流程不太理想。

我们愿意为了速度而牺牲一定程度的准确性。

我已经尽可能地寻找解决方案,但我对网格数据和插值还很陌生,所以可能使用了不合适的语言,因此缺少一个简单的解决方案。

最佳答案

如果您愿意通过找到最近的邻居并使用其值来进行估算,我认为诀窍是使用有效的最近邻居实现,该实现允许您在 O(log(n)) 时间内找到 n 个备选方案中的最近邻居。 kd 树提供了这种性能,可通过 R 中的 FNN 包获得。 虽然计算(随机生成的数据有 6900 万个数据点供引用,500 万个数据点要插补)不是即时的(大约需要3 分钟),比 2 周快得多!

data <- cbind(x=rnorm(6.9e7), y=rnorm(6.9e7))
labels <- rnorm(6.9e7)
query <- cbind(x=rnorm(5e6), y=rnorm(5e6))

library(FNN)
get.nn <- function(data, labels, query) {
nns <- get.knnx(data, query, k=1)
labels[nns$nn.index]
}
system.time(get.nn(data, labels, query))
# user system elapsed
# 174.975 2.236 177.617

作为警告,该进程在大约 10GB 的 RAM 上达到峰值,因此您将需要大量内存资源才能在您大小的数据集上运行。

关于r - 在 R 中有效地插入来自网格的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30262434/

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