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

2 views (last 30 days)
Tim David on 19 Mar 2021
Commented: Stephen on 19 Mar 2021
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.
Jan on 19 Mar 2021
What is the wanted output for [1,2,3] ?

Stephen 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 CommentsShowHide 1 older comment
Stephen 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.

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

R2017b

### Community Treasure Hunt

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

Start Hunting!

Translated by