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

2 visualizzazioni (ultimi 30 giorni)
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.

Risposta accettata

Stephen23
Stephen23 il 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 Commenti
Tim David
Tim David il 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 il 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.

Accedi per commentare.

Più risposte (1)

Robert U
Robert U il 19 Mar 2021
Modificato: Robert U il 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

Categorie

Scopri di più su MATLAB in Help Center e File Exchange

Tag

Prodotti


Release

R2017b

Community Treasure Hunt

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

Start Hunting!

Translated by