1

我有一个地理栅格地图的大型 CSV 文件表示 - 42011 列 x 18510 行,磁盘上大约 10GB。该文件是使用 FFT 函数作为卷积的输出创建的,该函数涉及将原始栅格分成六个条带,处理每个条带,并使用重叠相加方法将结果矩阵附加到 csv 文件中。

我现在正在尝试使用 R 包raster将结果写回光栅文件类型(例如 ESRI bil、GeoTIFF 等) 。CSV 文件中的每个数字都映射到栅格的等效像元。

在 R 中执行此操作的明显方法是:

library(raster)
library(data.table)
data <- fread("data.csv")                                  ## Read in data (as data.table)
data_mat <- data.matrix(data)                              ## Convert to matrix 
data_raster <- raster(data_mat, template=existing_raster)  ## Write to raster using existing layer as template

但是,我的电脑在尝试创建矩阵的阶段内存不足:

Error: cannot allocate vector of size 5.8 Gb
In addition: Warning messages:
1: In matrix(if (intOK) NA_integer_ else NA_real_, nrow = d[1L], ncol = d[2L],  :
   Reached total allocation of 16108Mb: see help(memory.size)
etc

计算机运行 64 位 R 和 16GB RAM。

到目前为止我尝试过的事情包括:

  • bigmemory - 这看起来很有希望,因为 raster 函数可以将 big.matrix 作为输入,但该包目前不适用于 Windows。

  • ff - 到目前为止我还没有完全掌握这个包的功能,但目前我看不到从 data.table 到 ff 对象的方法,我不确定是否会有方法从那个到栅格层。

  • 稀疏矩阵(使用包“Matrix”) - CSV 可能超过 50% 0。但是,我目前无法找到一种方法从磁盘将其作为稀疏矩阵读取,或者将其从 data.table 获取到稀疏矩阵中。我不知道我是否能够到达光栅。

我最熟悉 R,但也有 Python 的工作知识和访问 ArcGIS。我不确定这个问题是在这里还是在 gis.stackexchange 上更好,但这似乎主要是一个编程问题。任何建议都感激不尽!

4

1 回答 1

0

大矩阵一直是 R 中的问题。我不熟悉地理栅格地图。但是是否有可能将您的数据框分割成碎片并以不丢失信息的方式生成矩阵?
“ff”包可能会有所帮助。我在这里找到了一个相关的教程,它展示了很多使用“ff”包处理大对象的例子。具体来说,第 20 页,“使用数组和矩阵”,希望它有所帮助。ff 包示例

于 2014-06-17T16:55:50.590 回答