【问题标题】:Reshape N 2-d matrices (T*M) into a 3d tensor of (T*N*M) with tidyverse/R使用 tidyverse/R 将 N 个 2-d 矩阵 (T*M) 重塑为 (T*N*M) 的 3d 张量
【发布时间】:2019-04-14 20:44:04
【问题描述】:

对于我的 N 个变量中的每一个,我都有一个 (T * M) 特征矩阵,即每 t \in T 有 M 个观察值。问题是如何将其转换为 (T * N * M) 数组。例如,在下面的例子中 N=2, T=3, M=4 :

x1 <- matrix(1:24, 3,4)
> x1
     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]    2    5    8   11
[3,]    3    6    9   12


x2 <- matrix(25:48, 3,4)
x2
     [,1] [,2] [,3] [,4]
[1,]   25   28   31   34
[2,]   26   29   32   35
[3,]   27   30   33   36

我需要制作一个 3 维(行数)数组,这样第一个元素是

     [,1] [,2] [,3] [,4]
[1,]    1    4    7   10
[2,]   25   28   31   34

第二个是:

    [,1] [,2] [,3] [,4]
[1,]    2    5    8   11
[2,]   26   29   32   35

第三个:

[,1] [,2] [,3] [,4]
[1,]    3    6    9   12
[2,]   27   30   33   36

等等等等。对于以下示例,输出的维度应为 (3,2,4)。

我需要为相对较大的 N 和 T 执行此操作,因此感谢可扩展的实现!

【问题讨论】:

  • @markus 谢谢,我已经相应地编辑了标签

标签: arrays r matrix reshape2


【解决方案1】:

这是一个base R 选项。

out <- `dim<-`(rbind(c(t(x1)), c(t(x2))), c(2, 4, 3))
out
#, , 1
#
#     [,1] [,2] [,3] [,4]
#[1,]    1    4    7   10
#[2,]   25   28   31   34
#
#, , 2
#
#     [,1] [,2] [,3] [,4]
#[1,]    2    5    8   11
#[2,]   26   29   32   35
#
#, , 3
#
#     [,1] [,2] [,3] [,4]
#[1,]    3    6    9   12
#[2,]   27   30   33   36

当我们调用x &lt;- rbind(c(t(x1)), c(t(x2))) 时,我们会得到以下矩阵

x
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12]
#[1,]    1    4    7   10    2    5    8   11    3     6     9    12
#[2,]   25   28   31   34   26   29   32   35   27    30    33    36

我们需要改变我们可以做的这个对象的尺寸

dim(x) <- c(2, 4, 3)

另一种获得相同结果的方法是在其dim 中调用functional form 的替换方法,即

`dim<-`(...)

这使我们可以在一行中完成所有操作。

【讨论】:

  • 谢谢!你介意解释一下这是如何工作的吗?具体来说,我之前没有遇到过这种形式的dim&lt;-
  • @Alex 添加了一些解释。希望这会有所帮助
  • 谢谢!也许没有直接关系,但我需要 Keras 的尺寸为 c(3,2,4)(3 个样本,每个 2*4)。我似乎无法通过 dim 或 aperm 做到这一点;它打乱了顺序。你知道怎么做吗?
  • 但是解决方案没有给你想要的输出吗?
  • 上述解决方案返回 c(2, 4, 3),这意味着每个 4*3 有 2 个样本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-02-27
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多