2010-10-26 177 views
6

我試圖將一個三維數組轉換成矩陣。我想要數組的第三維形成矩陣中的第一行,並且這個第三維應該按行讀取(即,第3行的第1行,然後第2行等)應構成第矩陣)。我在下面給出了一個例子,其中數組的維數爲4,3和5,結果矩陣有5行和12列。我有一個解決方案實現了我想要的,但對於大型數組來說,它似乎非常麻煩(它首先從數組元素(按行)創建矢量,然後將這些矢量組合成矩陣)。有沒有更優雅的方式來做到這一點?在此先感謝您的任何建議。將一個三維數組轉換成一個矩陣R

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]]) 
+0

您應該更改配方。您可能意指數組的「第一個元素」,即陣列打印時打印的矩陣。這些矩陣是數組的_3rd_維的元素。從你的例子中,我發現你只是想扁平化前兩個維度。我的答案在下面給你你想要的。 – VitoshKa 2010-10-26 09:28:25

+0

感謝VitoshKa指出 - 我編輯了這個問題。 – Steve 2010-10-26 09:38:37

回答

16

使用aperm

X <- aperm(dat,c(3,2,1)) 
dim(X)<- c(5, 12) 
+0

這很好,謝謝。 – Steve 2010-10-26 09:41:36

相關問題