【发布时间】:2018-01-20 05:02:32
【问题描述】:
我遇到了以下问题:
我有一个维度为 dim(x)= (46, 13, 30) 的大数组“x”。 我正在尝试计算一个新矩阵“M”(30,598),它基本上包含第一列中每个“切片”的第一个元素,第二列中的第二个元素等等......最终,我想使用包含每个网格单元的所有元素的向量(M 的列)。
使用以下函数,我将能够计算我的矩阵 M。但是,考虑到大型数组,它并不是一个用户友好的解决方案:
M <- cbind(x[1,1,],x[1,2,],x[1,3,],x[1,4,],x[2,1,],x[2,2,], x[2,3,],x[2,4,]......)
这就是我想使用 for 循环的原因。不幸的是,我不知道怎么做。
这是我迄今为止尝试过的(不成功):
M <- matrix(NA, nrow = 6, ncol = 20)
for (i in 1:120){
M[i] <- cbind(x[,,i])
}
这个循环只创建第一个向量(每个“切片”[1,1,] 的第一个元素),而不是中止。
关于如何完成这项工作的任何想法? 非常感谢您的帮助!
【问题讨论】:
-
如果您发布一些虚拟数据会很有帮助,例如一个 3 维的小数组,因此我们可以更好地帮助您。
-
例如
set.seed(1) ; x <- array(rnorm(2*3*5), dim = c(2, 3, 5))。以及相关的期望输出 -
在我的例子中,你想要的输出是
desired_output <- cbind(x[1,1,],x[1,2,],x[1,3,],x[2,1,],x[2,2,], x[2,3,])吗? -
正是 Aurèle,这就是我想要得到的!
-
然后
t(apply(x, 3, identity))
标签: arrays r loops for-loop matrix