How can I index a vector based on the vector's values?

11 visualizaciones (últimos 30 días)
Shahriyar Karim
Shahriyar Karim el 13 de Mzo. de 2020
Comentada: Shahriyar Karim el 13 de Mzo. de 2020
Say I have a vector,
V = [2 5 4 1 3]
and I want to use the numbers of the vector itself to index. Starting from 1, I go to the first element in V; which = 2.
From there, I want to go to the 2nd element of V--5, then 3, then 4, and finally 1.
How would I go about extracting Vnew = [1 2 4 5 3]?
So far I've tried:
V(V) = [5 3 1 2 4]
I'm assuming it'll require some sort of loop but I'm completely stumped right now.
EDIT: Apologies for the confusion in the explanation above; I don't need the produced vector, but the order in which it's produced--if that makes any sense.
Starting at index 1 of V, I get 2. Then I use 2 as the index of V to get 5--use 5 to get 3--3 for 4---4 loops back to 1.
The part I need is the order in which I loop through. The first index will always be 1, but say the first element of V was 3. I'd then go to the THIRD element of V and Vnew for the third element would equal 2. Using this method, I need to output Vnew = [1 2 4 5 3].
  3 comentarios
Shahriyar Karim
Shahriyar Karim el 13 de Mzo. de 2020
That's an answer I got previously, but it isn't exactly what I'm looking for. I've tried to clarify a bit more in the original post
BobH
BobH el 13 de Mzo. de 2020
Editada: BobH el 13 de Mzo. de 2020
V = [2 5 4 1 3]
sequence followed is 1, then 2 5 3 4, then 1
2 5 3 4 1 are found in V in these positions 1 2 5 3 4
You consistently show a 4 in the third position of your desired output, and I can't see how you place a 4 there.

Iniciar sesión para comentar.

Respuesta aceptada

BobH
BobH el 13 de Mzo. de 2020
Editada: BobH el 13 de Mzo. de 2020
V = [2 5 4 1 3];
R(1) = V(1);
for i = 2:length(V)
R(end+1) = V( R(i-1) );
end
R % new vector
R =
2 5 3 4 1
% The sequence of indices followed within V
S = [1 R(1:length(V)-1)]
S =
1 2 5 3 4
  1 comentario
Shahriyar Karim
Shahriyar Karim el 13 de Mzo. de 2020
Okay this makes sense. I was overthinking it way too much--that's probably why I was confused over the indexing in your other comment; it makes sense now. Thank you!

Iniciar sesión para comentar.

Más respuestas (1)

Fangjun Jiang
Fangjun Jiang el 13 de Mzo. de 2020
I believe it is like this
V = [2 5 4 1 3];
newV=zeros(size(V));
index=1;
for k=1:numel(V)
newV(k)=V(index)
index=newV(k);
end
  2 comentarios
Shahriyar Karim
Shahriyar Karim el 13 de Mzo. de 2020
This is what I got before in a previous answer; but it isn't exactly what I'm looking for. I've edited the original post for a bit more clarification.
Fangjun Jiang
Fangjun Jiang el 13 de Mzo. de 2020
I don't get it. Your expected Vnew is wrong according to your explaination.

Iniciar sesión para comentar.

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by