r - R光栅乘法 - 为什么光栅大小会大大增加
问题描述
我正在使用 R(光栅包)中的 MODIS 光栅数据,我想知道,为什么将两个光栅文件相乘时光栅的大小会变大 7000 倍。在我的例子中,一个栅格是一个简单的 MODIS 栅格(值介于 0 和 255(整数)之间),另一个是一种模板(0 和 1(整数))。所以我不明白为什么光栅应该这么大?尝试使用 writeRaster 保存栅格时这是一个大问题,因为我的 R 会话不断崩溃。
我的代码如下所示:
a <- list.files('All_MODIS_files_of_one_year.tif')
for (day in 1:length(a)){
ra <- raster(a[day])
ra_reduce <- ra * s
对象大小ra
为 12064 字节,对象大小s
为 11984 字节。对象大小ra_reduce
为 93777512 字节。当我最终堆叠一整年时,文件变得几乎 40 GB 大。:(
我尝试了该round
函数,尝试将其设置@file@datanotation
为整数,但没有任何帮助。有谁知道如何解决这个问题?!
解决方案
ra
(可能也是)的对象大小s
非常小,因为它在内存中没有单元格值。如果您show(ra)
会看到数据在磁盘上(在文件中)。乘法后,值将在内存中。您可以通过使用诸如calc
或overlay
允许您将结果写入文件的方法来避免这种情况,或者使用writeRaster
. 那是:
x <- overlay(ra, s, fun=function(x,y){x*y}, filename='file.tif')
或者
ra_reduce <- ra * s
ra_reduce <- writeRaster(ra_reduce, filename='ra_reduce.tif')
要减小文件大小,您可以(也许)使用该datatype
参数。
推荐阅读
- html - HTML 文件未加载 CSS
- python - 无法使用带有硒的html xpath打印文本
- neo4j - 获取两个 Neo4j 路径中的公共节点序列
- reactjs - 在 Web Firestore 中,当页面重新加载时,get() 回调会执行两次
- python - django中的并发请求
- c# - FromRoute 不在单独的 DTO 类中设置 Url 参数
- python - 滚动条颜色不改变颜色
- java - 如何使用 Twilio 在当前通话中添加另一个号码?
- json - 我们可以自动化 kubectl 推荐吗
- ftp - 我们可以使用 FTP 在 apache-beam 中导入数据吗?