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

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.

 Réponse acceptée

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 commentaires

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?
"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.

Connectez-vous pour commenter.

Plus de réponses (1)

Robert U
Robert U le 19 Mar 2021
Modifié(e) : Robert U le 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

Catégories

En savoir plus sur Mathematics dans Centre d'aide et File Exchange

Produits

Version

R2017b

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by