在 R 中将 3D 数组转换为矩阵

Transform a 3D array into a matrix in R

提问人:Steve 提问时间:10/26/2010 最后编辑:Steve 更新时间:2/7/2020 访问量:14027

问:

我正在尝试将 3D 数组转换为矩阵。我希望数组的第三个维度形成矩阵中的第一行,并且这个第三个维度应该按行读取(即,第 1 行,然后是第 2 行等......维度 3 应该构成矩阵的第一行)。我在下面举了一个例子,其中数组的维度为 4、3 和 5,生成的矩阵有 5 行和 12 列。我在下面有一个解决方案,可以实现我想要的,但对于大型数组来说,它似乎非常麻烦(它首先从数组的元素(按行)创建向量,然后对这些元素进行 rbinds 以形成矩阵)。有没有更优雅的方法可以做到这一点?提前感谢您的任何建议。

dat <- array( rnorm(60), dim=c(4, 3, 5) )   

results <- list(1:5)            
for (i in 1:5) {  
    vec <- c( t(dat[, , i]) )  
    results[[i]] <- vec  
    }

datNew <- rbind( results[[1]], results[[2]], results[[3]], results[[4]], results[[5]] )  
r

评论

0赞 VitoshKa 10/26/2010
您应该更改配方。您可能指的是数组的“第一个元素”,即打印数组时打印的矩阵。这些矩阵是数组第 3 维的元素。从你的例子中,我看到你只想展平前两个维度。我下面的答案给了你你想要的。
0赞 Steve 10/26/2010
感谢 VitoshKa 指出这一点 - 我编辑了这个问题。

答:

18赞 Marek 10/26/2010 #1

aperm

X <- aperm(dat,c(3,2,1))
dim(X)<- c(5, 12)
1赞 Carlos Llosa 4/29/2019 #2

一行回答:

t(apply(dat,3,"c"))