indexshiftrearranges the indices of a tensor. It is one of two generalizations of the matrix transpose operation (cf.
indexshifttakes at least one argument which is the tensor on which the index shifting is to be performed. One or two additional arguments may be provided to specify the index and the position to which it is to be shifted. If no additional arguments are provided, the first index of the tensor is shifted to the second position (equivalent the matrix transpose operation). If one additional argument is provided, it specifies the index to be shifted, and that index will be shifted "to the right" one position (e.g., if 3 is specified, the third index will be shifted to the forth position). If two additional arguments are provided, the first specifies the index and the second specifies the position to which it is to be shifted. The actual index shifted and its shifted position will be constrained to be between 1 and the rank of the tensor.
For example, given
x[a,b,c,d], the command
y:indexshift(x,1,3);produces a tensor y such that
y[a,b,c,d] == x[b,c,a,d]. In this example, the element that was in position
[a,b,c,d]in x will be in position
Special cases: If
indexshiftis given a scalar (rank 0 tensor) as input, it just returns the scalar. For a vector (tensor of rank 1),
indexshifttransposes the 1-by-n matrix (row vector) to an n-by-1 matrix (column vector).