gpt4 book ai didi

光栅选项 : Difference between chunksize and maxmemory

转载 作者:行者123 更新时间:2023-12-03 07:29:42 24 4
gpt4 key购买 nike

我最近偶然发现了两种可能的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com