Matlab - Como ordenar columna de matriz

 
Vista:
sin imagen de perfil
Val: 29
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Como ordenar columna de matriz

Publicado por Junior (7 intervenciones) el 15/10/2020 10:46:54
Buenos dias,
Como puedo hacer para poder lograr esto:
"Reordenar las columnas de una matriz (ejemplo 5x5 con numeros aleatorios) poniendo primero las que tengan suma menor."

Os agradecería la ayuda,
Un saludo
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
Imágen de perfil de Jon
Val: 354
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Como ordenar columna de matriz

Publicado por Jon (161 intervenciones) el 15/10/2020 12:01:06
Hola,

Quizás me haya complicado demasiado, pero aquí tienes un ejemplo que funciona. Si no entiendes bien el código, me dices.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
%% Datos
d = 5;                                  % dimensión de la matriz
M = [13 23 26 32 5; 4 12 43 16 60;...
    11 72 33 21 67; 31 42 62 2 55;...
    19 45 52 64 9];                     % matriz aleatoria
 
fprintf('EJERCICIO MATLAB: REORDENACIÓN DE COLUMNAS EN UNA MATRIZ\n\n');
display(M);
 
%% Solución
% Suma de columnas
for i = 1:d
    suma(i) = sum(M(:,i));
end
suma_orden = sort(suma, 'descend');             % ordenado de mayor a menor
display(suma);
display(suma_orden);
 
% Búsqueda de los "index"
for i = 1:d
    for j = 1:d
        if suma_orden(i) == suma(j)
            fprintf('La %d. mayor columna es la %d\n',i,j);
            index(i) = j;
        end
    end
end
 
% Matriz ordenada
M_orden = M(:,index);
 
%% Resultado
fprintf('\n---------------------------------\n');
display(M_orden);

Espero que sirva de ayuda.

Un saludo,

Jon
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: 29
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Como ordenar columna de matriz

Publicado por Junior (7 intervenciones) el 15/10/2020 12:34:04
Hola Jon,

Muchas gracias por tu respuesta, voy a guardarlo seguro que me servirá.

Pero una duda, sabrías si esto es posible hacerlo sin tener que usar los ciclos for?

Un saludo,
gracias
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

Como ordenar columna de matriz

Publicado por Daniel (354 intervenciones) el 15/10/2020 12:42:43
Hola,

Si, con sum y sort se pude hacer en un par de lineas

1
2
[~, idx] = sort(sum(M,2));
M(idx, :)

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: 29
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Como ordenar columna de matriz

Publicado por Junior (7 intervenciones) el 15/10/2020 14:52:08
Hola Daniel,

Gracias por tu respuesta. He comprobado eso que indicabas pero no sale exactamente lo que busco. Por ejemplo te muestro como seria:

Esta es la matriz original:
1
2
3
4
M =
[9 8 7;
 6 5 4;
 3 2 1]

y busco conseguir algo así:
1
2
3
[7 8 9;
 4 5 6;
 1 2 3]

Esto por el orden de las sumas de las columnas, la primera col = 12, 2da col = 15 y 3ra Col = 18.

Un saludo,
Muchas gracias
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: 29
Ha aumentado 1 puesto en Matlab (en relación al último mes)
Gráfica de Matlab

Como ordenar columna de matriz

Publicado por Junior (7 intervenciones) el 15/10/2020 15:46:22
Hola Jose,

Muchas gracias!! Es justamente lo que buscaba hacer :) :)


Un saludo,
Junior
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