垂直扩展R 3D阵列

时间:2018-12-03 22:26:41

标签: arrays r matrix multidimensional-array

我有一个大小为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

预先感谢

2 个答案:

答案 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