我正在尝试将一个3维矩阵或几个栅格层舍入为3维矩阵,将其舍入到小数点后2位,以制作一个新的netcdf文件,该文件占用更少的内存。
按如下方式使用舍入功能:
newmatrix <- round(oldmatrix, 2)
似乎只是将值四舍五入以显示。将newmatrix添加到新文件中之后,打开newmatrix并从中提取值将返回oldmatrix中未取整的值。尽管有这样一个事实,那就是从newmatrix提取的值在添加到新文件之前将被四舍五入到小数点后两位。如果在用栅格图层创建新矩阵之前将栅格图层舍入,则会发生相同的情况。
我可以使用什么函数将矩阵或栅格的值永久舍入以写入四舍五入的新文件?
答案 0 :(得分:1)
NetCDF没有固定的精度格式,不会以您期望的方式节省空间。 (有关数据类型,请参见here)。节省空间的通常方法是将其编码为短整数并设置变量属性scale_factor
和add_offset
。
在您的情况下,您将乘以100,转换为short,并得到scale_factor=0.01
。在R中执行此操作可能需要很多工作,但是nco实用程序可以在几行中处理它。
假设您有一个名为rh
的变量。
ncap2 -v -s 'rh=short(100*rh)' in.nc out.nc
ncatted -O -h -a add_offset,rh,o,f,0 out.nc
ncatted -O -h -a scale_factor,rh,o,f,0.01 out.nc
如果您希望在将变量读入R时节省内存,您可能会感到失望,因为在读取时它将被转换回浮点数。