How to shift entries in a vector by the value of the number in that entry?

1 view (last 30 days)
For example, if i have a vector
T = [0, 0, 4, 0, 7, 0, 0, 5, 0, 9]
How would i go about moving every entry to the right by the number in that entry?
Ie: T(3) 4 spaces to the right, T(4) 0 spaces to the right, and T(8) 5 spaces to the right so that it overwrites the orginal T(3).
Thanks.

Accepted Answer

Stephen23
Stephen23 on 19 Mar 2021
T = [0, 0, 4, 0, 7, 0, 0, 5, 0, 9]
T = 1×10
0 0 4 0 7 0 0 5 0 9
N = numel(T);
X = 1+mod(T+(0:N-1),N);
for k = 1:N
T([k,X(k)]) = [0,T(k)];
end
disp(T)
0 7 5 0 0 0 4 0 9 0
  2 Comments
Tim David
Tim David on 19 Mar 2021
This is good, thank you. Is there a way to repeat this multiple times? Ie this method used again on the new T vector, then again on the resultant T vector and so on?
Stephen23
Stephen23 on 19 Mar 2021
"Is there a way to repeat this multiple times? Ie this method used again on the new T vector, then again on the resultant T vector and so on?"
Put it inside another loop.

Sign in to comment.

More Answers (1)

Robert U
Robert U on 19 Mar 2021
Edited: Robert U on 19 Mar 2021
Hi Tim David,
you can apply circshift() to the data.
T = [0, 0, 4, 0, 7, 0, 0, 5, 0, 9];
shiftme = @(A,nShift) circshift(A,A(nShift));
shiftme(T,3)
Kind regards,
Robert

Categories

Find more on Get Started with MATLAB in Help Center and File Exchange

Tags

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!