【发布时间】:2017-02-28 13:42:36
【问题描述】:
我有四个相当大的 RasterStack,想对它们做一些简单的计算。我怎样才能加快这些计算?我找到了this approach using overlay(),但是计算仍然需要很长时间。
我的 RasterStacks (s1,s2,s3,s4) 具有所有维度:26, 76, 1976, 3805 (nrow, ncol, ncell, nlayers),我当前的代码如下所示:
out <- overlay(s1,s2,s3,s4, fun = function(rs1,rs2,rs3,rs4) {return((rs1+rs2-rs3-rs4)*1e3)})
有什么想法吗?
编辑:要生成 RasterStack(例如 s1),您可以调用以下函数:
create_stack <- function(num.col,num.row,num.lay){
r <- raster(matrix(runif(num.row*num.col,0,10), ncol=num.col, nrow=num.row),
xmn=0, xmx=num.col, ymn=0, ymx=num.row )
ll <- replicate(num.lay , r )
return(stack(ll))
}
library(raster)
s1 <- create_stack(76,26,3805)
【问题讨论】:
-
请提供reproducible 示例。
-
您可能想尝试使用
ff包将您的 RasterStacks 转换为大的 3 维数组,然后对其进行计算。 ff 包在计算时效率更高,但是从raster到ff再到raster的传输也可能需要一些时间。