【问题标题】:From 3-Dimensional Array to a Matrix从 3 维数组到矩阵
【发布时间】:2014-02-24 19:24:01
【问题描述】:

在 R 中,我想将一个数组(维度:i、j、k)转换为一个矩阵,这样新矩阵的观察值(即行)是数组中的每个元素,一次拉出 k 个“层”。本质上,同样,新矩阵的行将由前一个数组的每个元素组成,矩阵的列等于数组的 k 维。因此,新矩阵应该由 i*j 行和 k 列组成。

如果我可以澄清或提供输入/输出示例,请告诉我!

谢谢!

编辑: 此代码有效(但未优化)-

    m = array(1:27,dim = c(3,3,3))
    m
    dim = dim(m)
    mparam = dim[3]

    listm = list()
    for (i in 1:mparam){
      listm[[i]] = as.vector(m[,,i])
    }

    untran = do.call(rbind,listm)
    transposed = t(untran)
    transposed

【问题讨论】:

  • 是的,请提供输入和所需输出的最小示例。人们通常更乐意通过一个小的“复制/粘贴示例”来提供帮助,并且更容易准确地理解你想要什么。参见例如here 干杯。
  • 顺便说一句,我同意 Henrik 的观点。这次我可能已经能够正确猜到你想要什么,但这只是一个猜测。我回答了一半,希望不得不删除我的答案,因为您没有提供示例。请在以后这样做。

标签: arrays r matrix


【解决方案1】:

像这样?

m <- array(1:27,dim = c(3,3,3))
> m
, , 1

     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

, , 2

     [,1] [,2] [,3]
[1,]   10   13   16
[2,]   11   14   17
[3,]   12   15   18

, , 3

     [,1] [,2] [,3]
[1,]   19   22   25
[2,]   20   23   26
[3,]   21   24   27

> matrix(m,9,3)
      [,1] [,2] [,3]
 [1,]    1   10   19
 [2,]    2   11   20
 [3,]    3   12   21
 [4,]    4   13   22
 [5,]    5   14   23
 [6,]    6   15   24
 [7,]    7   16   25
 [8,]    8   17   26
 [9,]    9   18   27

【讨论】:

  • 您实际上并不需要 matrix 的第三个参数——毕竟,如果尺寸不匹配,R 将回收并发出警告。
  • @CarlWitthoft 是的。我总是输入两个维度,因为我只是一个愚蠢的人,它让我更容易阅读。 :)
  • @joran 是的,这正是我所需要的!是的,我应该提供样本和所需的输入/输出。实际上,我在您的帖子之前编写了示例代码(如上所示)——不知道单个 matrix() 函数可以满足我的所有需求。 :-) 谢谢!
猜你喜欢
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2020-11-25
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多