使用 tidyverse/R 将 N 个二维矩阵 (T*M) 重塑为 (T*N*M) 的 3d 张量
Reshape N 2-d matrices (T*M) into a 3d tensor of (T*N*M) with tidyverse/R
对于我的 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 执行此操作,非常感谢可扩展的实现!
这里有一个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 <- 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)
另一种获得相同结果的方法是在其functional form中调用dim
的替换方法,即
`dim<-`(...)
这让我们可以在一行中完成所有工作。
对于我的 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 执行此操作,非常感谢可扩展的实现!
这里有一个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 <- 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)
另一种获得相同结果的方法是在其functional form中调用dim
的替换方法,即
`dim<-`(...)
这让我们可以在一行中完成所有工作。