How can I move all the elements of a particular column circulary upwards or circularly downwards by some shift s. I have a matrix A = [ 1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16] and shift columns 1, 2, 3 and 4 by shifts 2, 1 , 3 and 2 respectively then I get the matrix A as A = [9 6 15 12; 13 10 3 16; 1 14 7 4; 5 2 11 8].

 Akzeptierte Antwort

Ameer Hamza
Ameer Hamza am 20 Apr. 2020

0 Stimmen

Try this
A = [ 1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];
B = [9 6 15 12; 13 10 3 16; 1 14 7 4; 5 2 11 8];
shift = [2, 1, 3, 2];
C = A; % make a copy
for i=1:numel(shift)
C(:,i) = circshift(C(:,i), -shift(i));
end
Result
>> isequal(B, C)
ans =
logical
1

2 Kommentare

Abhishek Bakhla
Abhishek Bakhla am 21 Apr. 2020
thank you.
Ameer Hamza
Ameer Hamza am 21 Apr. 2020
Glad to be of help.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Ilian
Ilian am 20 Apr. 2020

0 Stimmen

If you just want to rotate the rows this could work:
s = -3; % shift (both positive and negative values work)
rows = size(A,1);
B = [A(mod(s-rows,rows)+1:end,:); A(1:mod(s-rows,rows),:)];
Stephen23
Stephen23 am 21 Apr. 2020

0 Stimmen

No loops:
>> A = [1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16];
>> S = [2,1,3,2]; % shifts
>> [R,C] = ndgrid(1:4,1:4);
>> B = A(sub2ind([4,4],1+mod(S+R-1,4),C))
B =
9 6 15 12
13 10 3 16
1 14 7 4
5 2 11 8

Kategorien

Mehr zu Programming finden Sie in Hilfe-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