# more simplified example:
m = 2
n = 3
a1 = array(1:(m*m*n), c(m,m,n))
a1
Чтобы сделать «круговой сдвиг», нам не нужно физически изменять данные n раз. Мы можем просто вычислить конечные индексы и подмножество данных один раз.
Например, мы хотим сдвинуть 2 раза:
n3 <- 2
new_ind <- c((1:n)[-(1:n3)], (1:n)[1:n3]) # calculate indices
new_ind
# [1] 3 1 2
a2_v2 = a1[,,new_ind] # one subset
a2_v2
# , , 1
#
# [,1] [,2]
# [1,] 9 11
# [2,] 10 12
#
# , , 2
#
# [,1] [,2]
# [1,] 1 3
# [2,] 2 4
#
# , , 3
#
# [,1] [,2]
# [1,] 5 7
# [2,] 6 8
PS Нет смысла сдвигать n
(3 `d размер размера) раз, так как мы получим исходные данные (это то, что вы сделали в вашем примере).