row circular shift in matrix

29 views (last 30 days)
Abhishek Bakhla
Abhishek Bakhla on 20 Apr 2020
Commented: Abhishek Bakhla on 24 Apr 2020
How can I shift all the elements of a particular row in matrix in left circular shift or right circular shift.

Accepted Answer

Tommy
Tommy on 20 Apr 2020
Edited: Tommy on 23 Apr 2020
M(row,:) = [M(row,end) M(row,1:end-1)]; % shift to the right
M(row,:) = [M(row,2:end) M(row,1)]; % shift to the left
(edit) To shift by any amount:
M = randi(10,5)
shift = 8; row = 2;
[n,m] = size(M);
M(row,:) = [M(row,(end-mod(shift,m)+1):end) M(row,1:(end-mod(shift,m)))] % shift to the right
M(row,:) = [M(row,(mod(shift,m)+1):end) M(row,1:mod(shift,m))] % shift to the left
(edit) Fixed mistake
  3 Comments
Abhishek Bakhla
Abhishek Bakhla on 23 Apr 2020
Hi, it seems to me that shift to left by any amount is not working could you please verify ?
Tommy
Tommy on 23 Apr 2020
Yes sorry I goofed! I used n where I should've used m. Let me know if that fixes it for you.

Sign in to comment.

More Answers (1)

Stephen23
Stephen23 on 23 Apr 2020
Simpler using circshift, where k<0 shifts to the left and k>0 shifts to the right:
M(row,:) = circshift(M(row,:),k,2)

Categories

Find more on Graphics Object Programming in Help Center and File Exchange

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!