光栅选项 : Difference between chunksize and maxmemory

标签 r raster r-raster

我最近偶然发现了两种可能的 rasterOptions,它们可以提高 R 中光栅操作的性能:chunksizemaxmemory。 然而我很困惑有什么区别。帮助页面指出:

  • block 大小: 在处理(逐 block )基于磁盘的 Raster* 对象时,单个 block 中读/写的最大单元数。

  • ma​​xmemory:读入内存的最大单元数。即,如果 Raster* 对象的单元数超过此数量,则 canProcessInMemory 将返回 FALSE。

根据我的理解,它们都是相同的,至少我无法通过定义弄清楚它们有什么区别以及它们如何相互影响。 IE。低 chunksize 与高 maxmemory 值相结合?

最佳答案

这些选项是栅格包中的帮助程序,通常不需要调用,除非您正在编写用户定义的栅格写入函数。

如果您的栅格无法读入 R,即在 canProcessInMemory 返回 FALSE 的情况下,您需要逐 block 读取栅格。如果这样做,您将提供 block 的大小,该大小由完整行的整数值决定,这些行将一次读取一个(或并行)。

您应该在一个 block 中读取多少行? blockSize() 帮助您确定这一点。

r <- raster(system.file("external/test.grd", package="raster"))
blockSize(r)

writeValues()结合使用,您可以手动将栅格对象的值逐 block 写入更快的RasterBrick类对象或对象RasterLayer 类,更加灵活。

默认值最多读取 1e8 个单元,这会导致不同的内存分配,具体取决于光栅单元的位数。如果您拥有大量内存,则可以通过增加最大内存量来获得良好的性能提升,并且拥有更多内存的返回会增加。

增加 block 大小并没有那么有值(value),因为增加 block 大小会降低性能。通过增加 block 大小,您将获得一些性能提升,但这并不那么重要。

虽然增加 block 大小有边际 yield ,但同时增加最大内存大小可能是一个坏主意,因为您通过在单个计算中执行此操作将整个栅格强制放入内存,这可能会触发canProcessInMemory 失败,这将停止栅格的处理,关闭连接,并吐出一些临时文件。

一个好的经验法则是减少 block 的大小以避免任何问题(直到一个限制 - 也许 1e5,你可能永远不会遇到任何问题)并牺牲一点性能,但为了尽可能增加最大内存(1e9 左右,具体取决于您的设备有多少 RAM)。

最后,有一个nice vignette关于为太大而无法容纳在内存中的栅格对象编写自定义函数。

关于光栅选项 : Difference between chunksize and maxmemory,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38368939/

相关文章:

r - ggplot 抛出错误 `label not found` ,而 `label` 显然存在

r - 仅针对重要的拟合绘制 geom_smooth

r - 为什么 spplot 为多个面板花费这么多时间

r - 在 R 中绘制二元图

r - 计算数据,按年份和按区域划分的R

带有映射表的 R 过滤表可减少 NA 值

r - 在 ggplot2 中绘制 geom_ raster() 的边距图

r - 顶部光栅背景上的空间对象图例

R:检测 "main"路径并使用内核删除或过滤GPS轨迹?

r - 使用邻域分析填充栅格中 NA 值的间隙(例如,不是单个单元格)