首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查询栅格以创建结果栅格

查询栅格以创建结果栅格
EN

Stack Overflow用户
提问于 2016-12-03 13:24:26
回答 1查看 47关注 0票数 0

我有两个相同范围的环境栅格等,以及模型结果的数据帧(其中包含env1和env2的所有可能组合)。我正在尝试为每个单元格创建一个填充模型结果的第三个栅格。

代码语言:javascript
复制
library(raster)
## Mock env rasters
env.param1 <- seq(1:100)
env.param2 <- seq(101:200)

ext <- extent(1,10,1,10)
env1 <- raster(ext,nrow=10,ncol=10)
values(env1) <- env.param1
env2 <- raster(ext,nrow=10,ncol=10)
values(env2) <- env.param2

## Mock model results
param.set <- expand.grid(env.param1,env.param2)
res.v <- seq(10001:20000)
res <- cbind(param.set, res.v)
res.rast <- raster(ext, nrow=10, ncol=10)
## 
for(i in 1:ncell(env1)){
  res.rast[i] <- res[which(res$Var1==env1[i] & res$Var2==env2[i]),"res.v"]  
}

这看起来是有效的,但是当env*中的值没有出现在res中时,它就失败了,这将发生在我的实际数据集中。我已经想出了一个解决方案,但它似乎很慢。

代码语言:javascript
复制
for(i in 1:ncell(env1)){

  res.rast[i] <-res[which(ifelse(abs(res$Var1-env1[i])==min(abs(res$Var1-env1[i])),TRUE,FALSE)
            & ifelse(abs(res$Var2-env2[i])==min(abs(res$Var2-env2[i])),TRUE,FALSE)),"res.v"]  
}

有没有办法优化这一点,以提高速度,因为我使用更高分辨率的env*栅格(我有一个新的数据集,分辨率比我的旧数据集高225倍)?B)当我开始在我的分析中包括更多的参数时,我如何扩展?

EN

回答 1

Stack Overflow用户

发布于 2016-12-05 04:24:53

这应该是可行的:

代码语言:javascript
复制
for(env1ind in unique(param.set$Var1)) {
  for(env2ind in unique(param.set$Var2)) {

    cells           <- which(env.param1 == env1ind &  env.param2 == env2ind)
    res.rast[cells] <- as.numeric(res[which(res$Var1 == env1ind & res$Var2 == env2ind),][3])

  }
}

而且应该比在像素上循环更快,但是我不能测试,因为你的“工作”解决方案给了我一个错误。

然而,这既不是高效的,也不是优化的。如果你有很大的图像,必须事先通过values加载内存中的所有数据可能会有问题。

如果你的“模型”并不复杂(即计算成本很高),我会考虑通过raster::stack将所有的输入栅格放在一起,然后使用calc来应用模型。这将允许您通过“图像块”工作,并在需要时使用并行处理。

HTH

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40944552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档