【问题标题】:Creation of big.matrix object from RasterBrick从 RasterBrick 创建 big.matrix 对象
【发布时间】:2023-04-06 14:18:01
【问题描述】:

为了对大型栅格数据集执行 kmean 聚类分析,我尝试使用 brick 函数将我的 RasterBrick 对象转换为 big.matrix 对象,但是当我将 .grd 文件读回 @987654324 时@所有信息都丢失了。

library(raster)
library(bigmemory)
library(biganalytics)

#initialize raster
one <- raster(matrix(rnorm(400), 20, 20))
two <- raster(matrix(rnorm(400), 20, 20))
three <- raster(matrix(rnorm(400), 20, 20))

#save brick object as .grd file
brick(one, two, three, filename = "test")

#read .grd file in as big.matrix
big_matrix <- as.big.matrix("test.grd", type = "double")

#check dimensions
dim(big_matrix)

#perform kmeans
bigkmeans(big_matrix, 3)

我可以在我的目录中看到 .grd 和 .gri 文件,但我不知道如何将它们读回,或者如何将 .grd 文件输入到bigkmean 函数中。知道我该怎么做吗?

【问题讨论】:

    标签: geospatial r-raster r-bigmemory


    【解决方案1】:

    示例数据

    library(raster)
    library(bigmemory)
    
    b <- brick(system.file("external/rlogo.grd", package="raster"))
    

    如果文件不是那么大,你可以这样做

    x <- as.big.matrix(values(b))
    

    否则,这是您可以使用的功能。

    r2bm <- function(from, filename="") {
        b <- big.matrix(ncell(from), nlayers(from), backingfile=filename )
        nc <- ncol(from)
        tr <- blockSize(from)
        for (i in 1:tr$n) {
            start <- ((tr$row[i]-1) * nc) + 1
            end <- start + (tr$nrows[i] * nc) - 1
            b[start:end, ] <- getValues(from, row=tr$row[i], nrows=tr$nrows[i])
        }
        b
    }
    

    现在使用它

    y <- r2bm(b, "bg.dat")
    

    【讨论】:

    • 谢谢你的第二部分解决了我的问题。
    猜你喜欢
    • 2017-11-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-27
    • 1970-01-01
    • 2014-01-14
    • 2013-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多