在R中使用栅格图层进行矩阵变换

问题描述 投票:0回答:1

我使用类型为num的输入的矩阵转换来跟踪一些代码:

> input
1     101.3862407     63.8025351
2     -39.2936491      0.3279252
3     -2.5526003      1.8761791
4     36.1441720     45.3625071
....

和转换矩阵:

transfmatrix <- matrix(c(0.9,-0.1,0.1,0.9),nrow=2)

> transfmatrix
      [,1] [,2]
 [1,]  0.9  0.1
 [2,] -0.1  0.9

然后我可以使用以下方法进行数据转换:

# transformation
result <-input%*%transfmatrix

这工作正常,但我希望“输入”是一个光栅文件。是否可以对栅格图层应用类似的转换?我尝试了以下方法:

library(raster)
r <- raster(ncol=40, nrow=20)
r[] <- rnorm(n=ncell(r))

test1<-stack(r,r*2)
test2 <- test1%*%transfmatrix

但收到错误:

Error in test1 %*% transf.m : 
requires numeric/complex matrix/vector arguments
r matrix transformation raster
1个回答
1
投票

您需要从数据中创建一个2列矩阵,然后乘以2x2矩阵。也许这个:

> z = as.matrix(test1) %*% transf.m
> dim(z)
  [1] 800   2

这使得来自test1的800个单元的800x2矩阵。

如果你想要一个带有值的栅格堆栈,那么,覆盖test1,执行:

> test1[[1]][]=z[,1]
> test1[[2]][]=z[,2]
© www.soinside.com 2019 - 2024. All rights reserved.