子设置多暗淡。数组与矩阵

时间:2016-11-16 16:49:26

标签: arrays r subset

我想用三个矩阵对三维数组进行子集化,其中每个矩阵代表一个维度。 一个例子:

    set.seed(1)
    A = array(sample(1:10,24, replace=TRUE), dim=c(3,4,2))

    ind_dimension1 = matrix(c(1,3,2,1), nrow=2)
    ind_dimension2 = matrix(c(4,3,2,1), nrow=2)
    ind_dimension3 = matrix(c(1,2,2,1), nrow=2)

结果我想要一个与子集矩阵具有相同维度的矩阵,即2x2:

    # A[1,4,1](=1)    A[2,2,2](=8)
    # A[3,3,2](=10)   A[1,1,1](=3)

在Matlab中,这可以通过以下方式完成:

    A(sub2ind(size(A), ind_dimension1, ind_dimension2, ind_dimension3))

使用两个维度,即A2=A[,,1],可以使用Hiebeler(2010)https://cran.r-project.org/doc/contrib/Hiebeler-matlabR.pdf(第5页)中提到的sub2ind(size(A2), ind_dimension1, ind_dimension2)在R中复制Matlab命令(ind_dimension2-1)*dim(A2)[2]+ind_dimension1。这在更高的维度上是不可能的。

提前致谢。

1 个答案:

答案 0 :(得分:0)

这个怎么样?

myMat <- matrix(A[cbind(c(ind_dimension1), 
                        c(ind_dimension2),
                        c(ind_dimension3))],
                  dim(ind_dimension1))

myMat
     [,1] [,2]
[1,]    1    8
[2,]   10    3

这使用矩阵子集(参见help("["))来提取所需的元素。维度矩阵转换为带有c的向量,然后重新组合成一个带有cbind的矩阵,用于从数组中提取。生成的矢量将输入matrix,所需的维度将生成dim