Matlab - Valores repetidos en un vector

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 4 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Valores repetidos en un vector

Publicado por Andrea (3 intervenciones) el 10/03/2020 20:53:22
Buena tarde, tengo el siguiente problema:

1
2
3
A=[72 37 32 22 37 20 21 40.3 32 48 37]'
B=sort(A) = [20 21 22 32 32 37 37 37 40.3 48 72]'

y necesito decir la posición de cada dato ordenado del vector... cuando no se repiten, este codigo me funciona:

1
2
3
for i = 1:m
Posicion(i)=(find(A(i)==B));
end

Pero como tengo valores repetidos, ya no funciona... debería quedar así:

1
Posicion=[11 6 4 3 7 1 2 9 5 10 8]

Alguna idea de como solucionarlo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Valores repetidos en un vector

Publicado por Daniel (354 intervenciones) el 10/03/2020 21:37:53
Hola,

La función sort devuelve una segunda salida que creo es lo que quieres. Solo hay que hacer

1
[B,I] = sort(A);

para tener en I los indicies de los valores en el vector original.

Saludos,
Daniel Rodríguez
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 54
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Valores repetidos en un vector

Publicado por Andrea (30 intervenciones) el 10/03/2020 21:49:35
Hola, gracias por tu respuesta, pero en este caso, me esta diciendo en que posición esta el valor ordenado respecto al original, y yo quiero que me diga el original en que posición del orden esta...
Tu respuesta me da:
1
[6 7 4 3 9 2 5 11 8 10 1
pero necesito:
1
Posicion=[11 6 4 3 7 1 2 9 5 10 8]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Valores repetidos en un vector

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 11/03/2020 02:59:22
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
%su pregunta es hermosa, porque permite usar la imaginación  y  la lógica en su plenitud
clear
A=[72 37 32 22 37 20 21 40.3 32 48 37]
B=sort(A)
Posicion=[];
for i=1:length(A)
   pos=find(A(i)==B);
   for j=1:length(A)
      a=find(pos(j)==Posicion);
      if isempty(a)
         Posicion(i)=pos(j);
         break;
      end
   end
end
Posicion

1
2
3
4
5
6
7
8
9
10
11
>> ordenar_vector
A =
   72.0000   37.0000   32.0000   22.0000   37.0000   20.0000   21.0000   40.3000   32.0000   48.0000   37.0000
 
 
B =
   20.0000   21.0000   22.0000   32.0000   32.0000   37.0000   37.0000   37.0000   40.3000   48.0000   72.0000
 
 
Posicion =
    11     6     4     3     7     1     2     9     5    10     8



Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab
Servicio de Asesoría Online en Matlab
[email protected]


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 918
Bronce
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Valores repetidos en un vector

Publicado por Daniel (354 intervenciones) el 11/03/2020 08:59:34
Hola,

Para eso solo tienes que contar el numero de ocurrencias a la hora de usar la salida find, por lo que solo hay que añadir una línea de código.

1
2
3
4
5
6
7
8
9
A = [72 37 32 22 37 20 21 40.3 32 48 37];
B = sort(A);
 
Posicion = zeros(size(A));
 
for i = 1:length(A)
    pos = find(A(i)==B);
    Posicion(i) = pos(sum(A(i) == A(1:i)));
end

Saludos,
Daniel Rodríguez
Analytics Lane
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar