为什么我们使用函数calc和stack来做栅格计算?这比直接使用我们的欲望函数更好吗?

吴宝莉

最近,我需要计算 12 个世界气候栅格图层的平均值。我们有两种方法可以做到。第一个更直接:

mean.layer <- mean(L1, L2,......,L12) # L1 means the first layer

或者

mean.layer <- (L1+L2+......+L12)/12

另一个对我来说是新的:

layer.stack <- stack(L1,L2,......,L12)
mean.layer <- calc(layer.stack, mean, na.rm = T)

有人可以解释使用calcstack代替mean直接使用函数的优点吗?据我所知,我们可以直接以相同的分辨率和扩展名操作栅格数据。


2021.7.10 编辑。我重写了第二种方法来纠正一些错误输入。

罗伯特·希曼斯

请始终包含一些示例数据

library(raster)
b <- stack(system.file("external/rlogo.grd", package="raster"))

这两个语句是等价的

x <- mean(b)
y <- calc(b, mean)

但是calc有一个文件名参数,因此您可以一步将结果保存到磁盘。

calc在处理大型栅格和更复杂的函数时尤其有利。例如

z1 <- calc(b, function(i) 100 - sqrt(mean(i + 10)))

相当于这个

z2 <- 100 - sqrt(mean(b + 10))

但是后者可能需要写 4 个临时文件来存储这些值,而前者只需要 1 个这样的文件。

你应该避免像这样获得平均值的方法

 mean.layer <- (L1+L2+......+L12)/12

编写起来很麻烦,容易出错,而且不能缩放(想象一下为 1200 个栅格做这件事!)。

我不知道你在哪里找到了calc你的问题中的公式,但这没有意义,也行不通。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我们应该使用RxJs of()函数?

为什么我们使用通过引用返回的函数

为什么我们在这个函数声明中使用 const 和 & ?

为什么我们使用mask来削减字节?

如何对我们使用clearInterval()函数?

为什么我们使用@staticmethod?

为什么我们使用抽象

我们为什么使用@Autowire

为什么我们使用TaskStackBuilder?

为什么我们使用“NULL”?

为什么我们使用setLayoutParams?

为什么我们使用()=> []而不是[]?

为什么我们使用扩展?

我们可以直接将值分配给任何数据成员。为什么要使用构造函数?

为什么我们在c中使用函数返回指针以及函数返回指针的应用

在 Rust 中使用递归创建我们自己的 sum 函数的最基本和最直接的方法是什么?

为什么我们使用损失来更新我们的模型,但使用指标来选择我们需要的模型?

为什么我们不能使用构造函数本身来初始化servlet?

Python:为什么我们在函数中使用布尔值来返回主程序中的打印语句?

为什么我们不需要导入任何模块来在python中使用print()、input()、len()、int()等函数

为什么我们使用 alpine 镜像来创建我们的自定义镜像

为什么我们不能使用ES6箭头函数创建原型?

为参数的构造函数使用的Mockito为什么我们不能创造间谍

为什么我们在getopt()函数中使用argc作为参数?

为什么我们需要Tensorflow的损失函数中的MNIST标签使用`int64`?

为什么我们不能使用表达式强健的构造函数?

为什么我们不能使用。作为带有%>%的匿名函数中的参数

为什么我们不能在jquery中使用setAtrribute函数?

在创建线程时,我们在构造函数中传递的参数包含(this)为什么使用它?