rasterOptions:chunksize和maxmemory之间的区别

maR*_*tin 3 r raster r-raster

我最近偶然发现了两个rasterOptions可以改善R:chunksize和R中光栅操作性能的可能性maxmemory.然而,我很困惑,区别在于什么.帮助页面说明:

  • chunksize: 处理(块中的块)基于磁盘的Raster*对象时在单个块中读/写的最大单元数.

  • maxmemory:读入内存的最大单元数.即,如果Raster*对象具有超过此数量的单元格,则canProcessInMemory将返回FALSE.

根据我的理解,它们都是相同的,至少我无法通过定义弄清楚它们之间的差异以及它们如何相互影响.即低chunksize结合高maxmemory值?

sha*_*yaa 5

这些选项是栅格包中的辅助程序,除非您编写用户定义的栅格写入功能,否则通常不需要调用它们.

如果您的栅格无法读入R,即在canProcessInMemory返回FALSE的情况下,您需要按块读取块中的栅格.如果执行此操作,则提供块的大小,由完整行的整数值确定,这些行将一次读取一个(或并行).

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

r <- raster(system.file("external/test.grd", package="raster"))
blockSize(r)
Run Code Online (Sandbox Code Playgroud)

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

默认值最多读取1e8个单元,这会导致不同的内存分配,具体取决于栅格单元的位数.如果你有大量的内存,你可以通过增加最大内存量来获得不错的性能提升,同时增加内存的回报.

增加块大小并不是那么有价值,因为性能越来越低,块大小越来越大.通过增加块大小可以获得一些性能提升,但它并不重要.

虽然增加块大小有微小的好处,但增加最大内存大小这样做​​可能是一个坏主意,因为你在一次计算中强制整个栅格进入内存,这可能会导致canProcessInMemory失败,将停止处理光栅,关闭连接,并吐出一些临时文件.

一个好的经验法则是减少块的大小以避免任何问题(达到极限 - 可能是1e5,你可能不会遇到任何问题)并牺牲一点性能,但要增加最大值内存尽可能多(1e9左右,具体取决于您的装备有多少RAM).

最后,有一个关于为光栅对象编写自定义函数的好小插图,这些对象太大而无法放入内存中.