row circular shift in matrix

29 Ansichten (letzte 30 Tage)
Abhishek Bakhla
Abhishek Bakhla am 20 Apr. 2020
Kommentiert: Abhishek Bakhla am 24 Apr. 2020
How can I shift all the elements of a particular row in matrix in left circular shift or right circular shift.

Akzeptierte Antwort

Tommy
Tommy am 20 Apr. 2020
Bearbeitet: Tommy am 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 Kommentare
Abhishek Bakhla
Abhishek Bakhla am 23 Apr. 2020
Hi, it seems to me that shift to left by any amount is not working could you please verify ?
Tommy
Tommy am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Stephen23
Stephen23 am 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)

Kategorien

Mehr zu Graphics Object Programming finden Sie in Help Center und File Exchange

Produkte

Community Treasure Hunt

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

Start Hunting!

Translated by