【问题标题】:Transform a 3D array into a matrix in R将 3D 数组转换为 R 中的矩阵
【发布时间】:2010-10-26 09:12:52
【问题描述】:

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

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

【问题讨论】:

  • 你应该改变配方。您可能指的是数组的“第一个元素”,即在打印数组时打印的矩阵。这些矩阵是数组的 3rd 维度的元素。从您的示例中,我看到您只想展平前两个维度。我在下面的回答给了你你想要的。
  • 感谢 VitoshKa 指出这一点 - 我编辑了这个问题。

标签: r


【解决方案1】:

使用aperm

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

【讨论】:

    【解决方案2】:

    一行答案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多