Programming

Shifting the Location of Matrix Elements

The circshift function shifts the elements of a matrix in a circular manner along one or more dimensions. Rows or columns that are shifted out of the matrix circulate back into the opposite end. For example, shifting a 4-by-7 matrix one place to the left moves the elements in columns 2 through 7 to columns 1 through 6, and moves column 1 to column 7.

Create a 5-by-8 matrix named A and shift it to the right along the second (horizontal) dimension by three places. (You would use [0, -3] to shift to the left by three places):

• A = [1:8; 11:18; 21:28; 31:38; 41:48]
A =
1     2     3     4     5     6     7     8
11    12    13    14    15    16    17    18
21    22    23    24    25    26    27    28
31    32    33    34    35    36    37    38
41    42    43    44    45    46    47    48

B = circshift(A, [0, 3])
B =
6     7     8     1     2     3     4     5
16    17    18    11    12    13    14    15
26    27    28    21    22    23    24    25
36    37    38    31    32    33    34    35
46    47    48    41    42    43    44    45

Now take A and shift it along both dimensions: three columns to the right and two rows up:

• A = [1:8; 11:18; 21:28; 31:38; 41:48];

B = circshift(A, [-2, 3])
B =
26    27    28    21    22    23    24    25
36    37    38    31    32    33    34    35
46    47    48    41    42    43    44    45
6     7     8     1     2     3     4     5
16    17    18    11    12    13    14    15

Since circshift circulates shifted rows and columns around to the other end of a matrix, shifting by the exact size of A returns all rows and columns to their original location:

• B = circshift(A, size(A));

all(B(:) == A(:))          % Do all elements of B equal A?
ans =
1                     % Yes

 Shifting and Sorting Matrices Sorting the Data in Each Column