我有一个大小为c(1,n,m)的数组。我想通过重复第一行k次垂直扩展数组。因此,我将得到一个大小为c(k,n,m)的数组。例如:
x <- array(1:6, c(1,3,2))
然后如果k为3,我希望扩展数组为
, , 1
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 2 3
[3,] 1 2 3
, , 2
[,1] [,2] [,3]
[1,] 4 5 6
[2,] 4 5 6
[3,] 4 5 6
我目前正在for循环中使用aperm执行此操作,但速度非常慢。因为我实际问题的尺寸大约是100 * 100 * 40000
预先感谢
答案 0 :(得分:1)
感谢IceCreamToucan,
我无法获得第一个解决方案,但第二个解决方案却非常有效。谢谢。尽管它仍然存在性能问题
我修改了您的原始解决方案,如下所示。速度更快,但不那么整洁:
out <- t(matrix(rep(as.vector(x), k), nrow= dim(x)[2]*dim(x)[3], ncol= k))
dim(out) <- c(k,1,1)*dim(x)
答案 1 :(得分:0)
您可以在{{ value }}
内使用replicate
并在之后修复apply
dim
或(结果相同)
k <- 3
out <- apply(x, 3, replicate, n = k)
dim(out) <- dim(x)*c(k, 1, 1)
aperm(out, c(2, 1, 3))
# , , 1
#
# [,1] [,2] [,3]
# [1,] 1 2 3
# [2,] 1 2 3
# [3,] 1 2 3
#
# , , 2
#
# [,1] [,2] [,3]
# [1,] 4 5 6
# [2,] 4 5 6
# [3,] 4 5 6