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

2 vues (au cours des 30 derniers jours)
Tim David
Tim David le 19 Mar 2021
Commenté : Stephen23 le 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.

Réponse acceptée

Stephen23
Stephen23 le 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 commentaires
Tim David
Tim David le 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 le 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.

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 MATLAB dans Help Center et File Exchange

Tags

Produits


Version

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by