【问题标题】:Merge multiple rasters into one final raster by averaging for all points通过平均所有点将多个栅格合并为一个最终栅格
【发布时间】:2021-08-08 04:54:27
【问题描述】:

我正在处理许多栅格,以获得一个最终栅格来代表平均水平。

我有 365 个连续栅格:每个栅格代表一个地区的每日温度。 生成一个栅格:平均365个栅格的日值,以反映一年内的温度水平。

我不确定下面的代码是否正确?

temperature_average<- calc(h, mean) ## h is a stack of 365 rasters (daily temperature) in 2020

有没有办法达到这个目的?非常感谢任何指导。

【问题讨论】:

标签: r raster


【解决方案1】:

光栅代数有不同的方法,包rasterterra(这是光栅计算和操作的推荐包)。请参阅下面的基准

library(raster)
library(terra)
#toy data
r <- raster(ncol=36, nrow=18, vals=1:(18*36))
s <- stack(r,r*0.5,r/3,sin(r))
#convert raster to SpatRaster from terra package
t <- rast(s)

#raster::calc
temperature_average<- calc(s, mean)
#raster::mean
temperature_average2 <- mean(s)
#terra::app
temperature_average3 <- app(t,mean)
#terra::mean
temperature_average4 <- mean(t)
#see which is the fastes
library(microbenchmark)
microbenchmark("calc"=temperature_average<- calc(s, mean),
               "raster::mean"=temperature_average2 <- mean(s),
               "app"=temperature_average3 <- app(t,mean),
               "terra::mean"=temperature_average5 <- mean(t))

Unit: milliseconds
         expr    min      lq     mean  median      uq     max neval cld
         calc 2.8666 2.95185 3.336269 3.02475 3.10360 17.6321   100   c
 raster::mean 2.3398 2.39725 2.842573 2.44095 2.49595 32.4901   100  bc
          app 1.5573 1.59200 1.859306 1.63535 1.71005 20.6778   100 a  
  terra::mean 1.8386 1.88065 2.243889 1.94090 2.02975 21.0170   100 ab 

如您所见,terra::app 最快,其次是terra::mean

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-30
    • 1970-01-01
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 1970-01-01
    • 2015-09-13
    相关资源
    最近更新 更多