R栅格时间序列:什么是最有效的读写?

时间:2017-03-30 11:04:12

标签: r performance time-series r-raster

我有以下问题/疑问:

我编写了一个R函数,用于平滑时间序列中的值。时间序列由大量单个全局光栅文件定义,因此每个单个像素具有n个时间步长(通常大于500)的系列。即使我有足够的RAM,我也不得不依赖于块处理,因为加载整个数据集太多了。到目前为止一切都很好。

我写了(恕我直言)一个相当不错的代码,它尽可能利用并行处理。我有一台加工机器应该配备齐全,可以处理这么多的数据和计算。这让我相信大部分时间都是通过从磁盘读取大量值来完成的,然后在平滑后,将大量值写入磁盘。

所以我尝试使用普通硬盘或普通SSD上的文件来运行代码。 与我的期望相反,这并不重要。 然后我尝试运行一个测试功能,该功能读取文件,获取值并将其写回磁盘,光栅位于HDD,SSD或超快速SSD上。再次,没有显着差异。

我已经做了相当多的分析,以找到瓶颈,以及大量的时间用Google搜索有效的解决方案。这里和那里有一些信息,但我决定在这里发布这个问题,以获得明确的答案,也许还有一些指示我和其他人如何有效地管理事物。

所以没有进一步的麻烦(对于那些跳过上述内容的人),这是我的问题:

在如上所述的设置中(高数据量,块式处理,从磁盘读取和写入),在长栅格时间序列上进行计算的最有效(和/或最快)方式是什么涉及从磁盘读取和写入值?(特别是关于读写方面)

假设我有一个快速的SSD,我该如何利用速度?它是自动完成的吗? 有哪些影响因素(文件大小,文件类型,缓存)以及这些因素的最有效设置?

我知道就光栅而言,R与.grd的工作速度最快,但出于灵活性,兼容性和磁盘空间的原因,我想避免使用此格式。

也许我也误解了raster包与磁盘上的文件的交互方式。在这种情况下,我应该使用与getValueswriteValues不同的功能吗?

- 一些系统信息和示例代码: -

Os: Win7 x64
CPU: Xenon E5-1650 @ 3.5 GHz
RAM: 128 GB 
R-version: 3.2
Raster file format: .rst

读/写基准功能:

benchfun <- function(x){
  # x ... raster file

  xr <- raster(x)
  x2 <- raster(xr)

  xval <- getValues(xr)

  x2 <- setValues(x2,xval)

  writeRaster(x2,'testras.tif',overwrite=TRUE)

}

如果需要,我还可以为时间序列处理提供一些示例代码,但是现在我认为不需要。

欣赏所有提示!

谢谢,

缬氨酸

0 个答案:

没有答案