Number of places elements to be shifted, with default value
of 1 meaning to put the last element first, followed by the first
element, then the second, etc
a
Array to be shifted
v
Vector of numbers to be shifted in each dimension, with
default value corresponding to shift()ing each dimension by 1
unit. If the length of v is less than length(dim(a)),
it is padded with zeroes (thus a scalar value of i indicates
that the first dimension is to be shifted by i units)
Details
Function shift(x,n) returns P^n(x) where P is the
permutation (n,1,2,...,n-1).
Function ashift is the array generalization of this: the
n-th dimension is shifted by v[n]. In other
words,
ashift(a,v)=a[shift(1:(dim(a)[1]),v[1]),...,shift(1:(dim(a)[n]),v[n])].
It is named by analogy with abind() and aperm().
This function is here because a shifted semimagic square or hypercube
is semimagic and a shifted pandiagonal square or hypercube is
pandiagonal (note that a shifted magic square is not necessarily
magic, and a shifted perfect hypercube is not necessarily perfect).
Author(s)
Robin K. S. Hankin
Examples
shift(1:10,3)
m <- matrix(1:100,10,10)
ashift(m,c(1,1))
ashift(m,c(0,1)) #note columns shifted by 1, rows unchanged.
ashift(m,dim(m)) #m unchanged (Mnemonic).