我有一个地理栅格地图的大型CSV文件表示 - 42011列乘18510行,磁盘上大约10GB。该文件是使用FFT函数创建的卷积输出,其中包括将原始栅格分成六个条带,处理每个条带并使用overlap-add方法将结果矩阵附加到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。
到目前为止我尝试过的事情包括:
bigmemory - 这看起来很有希望,因为光栅功能可以在输入时使用big.matrix,但该软件包目前不适用于Windows。
ff - 到目前为止我还没有完全掌握这个软件包的功能,但是目前我看不到从data.table到ff对象的方法,我不确定那会有一种方法可以从那里获得一个栅格图层。
稀疏矩阵(使用包“Matrix”) - CSV可能超过50%0。但是,我目前无法找到一种从磁盘读取它作为稀疏矩阵的方法,或者将它从data.table转换为稀疏矩阵。无论我是否能够进入光栅,我都不知道。
我最熟悉R,但也具备Python的工作知识和对ArcGIS的访问权限。我不确定问题在这里或gis.stackexchange上是否更好,但它似乎主要是一个编程问题。任何建议都感激不尽!
答案 0 :(得分:0)
大矩阵一直是R中的问题。我不熟悉地理栅格地图。但是,是否可以将数据框分割成碎片并以不丢失信息的方式生成矩阵? &#34; FF&#34;包可能会有所帮助。我在这里找到了一个相关的教程,它展示了许多使用&#34; ff&#34;包大对象。具体来说,第20页,&#34;使用数组和矩阵&#34;,希望它有所帮助。ff packages examples