SHIFTDIM Shift Array Dimensions Function

Section: Array Generation and Manipulations


The shiftdim function is used to shift the dimensions of an array. The general syntax for the shiftdim function is
   y = shiftdim(x,n)

where x is a multidimensional array, and n is an integer. If n is a positive integer, then shiftdim circularly shifts the dimensions of x to the left, wrapping the dimensions around as necessary. If n is a negative integer, then shiftdim shifts the dimensions of x to the right, introducing singleton dimensions as necessary. In its second form:

  [y,n] = shiftdim(x)

the shiftdim function will shift away (to the left) the leading singleton dimensions of x until the leading dimension is not a singleton dimension (recall that a singleton dimension p is one for which size(x,p) == 1).


Here are some simple examples of using shiftdim to remove the singleton dimensions of an array, and then restore them:
--> x = uint8(10*randn(1,1,1,3,2));
--> [y,n] = shiftdim(x);
--> n

ans = 

--> size(y)

ans = 
 3 2 

--> c = shiftdim(y,-n);
--> size(c)

ans = 
 1 1 1 3 2 

--> any(c~=x)

ans = 

(:,:,1,1,1) = 

(:,:,1,1,2) = 

Note that these operations (where shifting involves only singleton dimensions) do not actually cause data to be resorted, only the size of the arrays change. This is not true for the following example, which triggers a call to permute:

--> z = shiftdim(x,4);

Note that z is now the transpose of x

--> squeeze(x)

ans = 
 0 0 
 0 3 
 0 0 

--> squeeze(z)

ans = 
 0 0 0 
 0 3 0