row circular shift in matrix

8 次查看(过去 30 天)
How can I shift all the elements of a particular row in matrix in left circular shift or right circular shift.

采纳的回答

Tommy
Tommy 2020-4-20
编辑:Tommy 2020-4-23
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 个评论
Abhishek Bakhla
Abhishek Bakhla 2020-4-23
Hi, it seems to me that shift to left by any amount is not working could you please verify ?
Tommy
Tommy 2020-4-23
Yes sorry I goofed! I used n where I should've used m. Let me know if that fixes it for you.

请先登录,再进行评论。

更多回答(1 个)

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

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by