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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在R中使用栅格图层进行矩阵变换相关的知识,希望对你有一定的参考价值。

我使用类型为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
答案

您需要从数据中创建一个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]

以上是关于在R中使用栅格图层进行矩阵变换的主要内容,如果未能解决你的问题,请参考以下文章

计算R中具有不同来源和范围的2个栅格图层之间的重叠区域

R中矩阵和栅格的相对计算负担

如何在 R 中对 SpatialPointsDataFrame 进行子采样

急急急!用arcgis栅格计算器叠加栅格图层的时候,怎么用value字段以外的其它字段值进行叠加?

在变换中缩放和旋转矩阵?

ArcGIS server10.1如何动态添加栅格图层