我想用三个矩阵对三维数组进行子集化,其中每个矩阵代表一个维度。 一个例子:
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
。这在更高的维度上是不可能的。
提前致谢。
答案 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
。