当前位置: 首页 > 知识库问答 >
问题:

求R中光栅和矩阵(或两个矩阵)的每一行之间的角度

庄元龙
2023-03-14

我有一个有三个带的光栅和一个有三个列的矩阵。

library(raster)
#Make two single band raster with random values
r1 <- raster(ncol=36, nrow=18, xmn=-1000, xmx=1000, ymn=-100, ymx=900)
set.seed(42)
values(r1) <- runif(ncell(r1))
r2 <- raster(ncol=36, nrow=18, xmn=-1000, xmx=1000, ymn=-100, ymx=900)
set.seed(123)
values(r2) <- runif(ncell(r2))
r3 <- raster(ncol=36, nrow=18, xmn=-1000, xmx=1000, ymn=-100, ymx=900)
set.seed(543)
values(r3) <- runif(ncell(r3))
#Stack them into a three-band raster
r <- stack(r1, r2, r3)

#Make a matrix with values    
y <- matrix(ncol=3, nrow=2, seq(1,6,1))

我想找到y的每一行和r的每一个单元格之间的角度。

#Function for angle
    specAngle <- function(a,b){
        acos(sum(a*b)/( sqrt(sum(a*a))*sqrt(sum(b*b))))
    }

我可以通过以下方式将光栅转换为矩阵:

m <- getValues(r)

现在,每个has矩阵都具有相同的形状(每个has矩阵中有3列,每行作为一个像素或来自y的样本)。我已经研究过如何使用嵌套的apply()函数,但老实说,我不理解语法,因此无法使其正常工作。

我有40个非常大的超光谱光栅(425个波段)和一个50行矩阵,我需要使用它来生成40个新的光栅,每个光栅有50个波段。如何有效地执行此操作?

共有1个答案

谈琛
2023-03-14

我想你可以这样做

x <- lapply(1:nrow(y), function(rownr) calc(r, function(i) specAngle(i, y[rownr,])))
s <- stack(x)

或写为循环

x <- list()
for (i in 1:nrow(y)) {
    x[[i]] <- calc(r, function(j) specAngle(j, y[i,]))
}  
s <- stack(x)

您还可以重写specAngle,以便它可以一次计算所有行(并返回一个向量),而不需要循环/重叠

 类似资料:
  • 假设我们有两个矩阵,即和,分别为和。 我们如何才能找到哪些行与行相同(反之亦然)? 优选的输出是矩阵,其行数等于矩阵和之间的标识行,两列,即第一列包含矩阵的行数,第二列包含矩阵的行数。

  • 我有一个带有空间坐标和一个变量的矩阵数据。空间分辨率为1000米。 我想将其转换为光栅格式。 我使用下面的代码来完成它。但我得到的决心与我得到的不一样。有没有更好的方法可以用我的真实数据获得相同的分辨率?

  • 我目前正在将原始矩阵转换为光栅以使用焦距函数,然后我想将光栅转换回矩阵。但是,当我尝试将光栅函数用作时,出现了一条错误消息。矩阵()。即使有这个非常简单的例子: 以下是我得到的: 如果(!is.null(names(x)))列表(names(x),,则数组(x,c(length(x),1L)中出错: “dimnames”[1]的长度不等于数组范围 我正在使用RstuIO、R版本3.4.0和、和库。

  • 我有一个矩阵,我想和另外两个矩阵进行比较,看看我矩阵中的每个条目是包含在另外两个矩阵的值之内还是之外。例如,如果我的矩阵是: 另外两个矩阵是L和U: 和 我想取M的每个条目,比较一下它是否包含在L和U对应条目的范围内。 例如,对于M[1,1],它在-0.49416022和-0.84996737的范围之外,所以我将给这个比较赋值0。另一方面,对于M[2,3],值是-0.5240536,因此在1.14

  • 我目前正在做一个音频信号处理项目,需要在Java中的一个复杂矩阵上使用SVD。我当前的线性代数库是Apache Commons。但它只提供实矩阵的SVD,JAMA、JBLAS、EJML、ojAlgo都不支持复杂的SVD。 我一直在用一些技巧从一个等效的实矩阵中找到SVD。然而,当我重建矩阵时,这种技术对于虚部有很大的不准确性。

  • 主要内容:语法,例子,访问矩阵的元素,矩阵计算矩阵是其中元素以二维矩形布局排列的R对象。它们包含相同原子类型的元素。 虽然我们可以创建一个仅包含字符或仅包含逻辑值的矩阵,但它们没有太多用处。 我们使用包含数学元素的矩阵来在数学计算中使用。 矩阵可通过使用函数来创建。 语法 在R中创建矩阵的基本语法是 - 以下是使用的参数的描述 - data - 是将要转为矩阵元素的输入向量。 nrow - 是要创建的行数。 ncol - 是要创建的列数。 b