Matlab

Ordenar una matriz en Matlab en base a una fila o columna

En Matlab existe la función sort() para ordenar los elementos de un vector o matriz. Pero cuando es necesario ordenar una matriz en Matlab en base a los valores de una fila o columna no existe una función análoga. Para solucionar este problema es necesario utilizar el segundo valor que devuelve la función sort() y los métodos para seleccionar elementos en Matlab.

La función sort()

La función sort() permite ordenar los elementos de una vector o matriz. Por defecto la ordenación es de forma ascender, aunque se puede indicar la dirección en los parámetros de la función. Al consultar la documentación de la función se puede observar que esta devuelve dos parámetros, el primero la matriz ordenada y el segundo una matriz con el orden de ordenación. Por ejemplo, para un vector de tres elementos se puede ver:

m = [1 5 3];
[s, o] = sort(m)
s =

     1     3     5


o =

     1     3     2

En este caso se puede ver que s es la matriz ordenada y o es orden en el que es necesario seleccionar los elementos del vector original m para obtener s. Así se puede obtener s a partir de m ordenandolo con o.

m(o)
ans =

     1     3     5

Esto se puede utilizar para ordenar una matriz en Matlab en base a una fila o columna.

Ordenar una matriz en Matlab en base a una columna

Ahora, si se utiliza sort() para ordenar una columna de una matriz se puede usar el segundo resultado para ordenar la matriz en base a esta. Para esto se pueden utilizar los métodos básicos de Matlab para seleccionar una columna de la matriz. Por ejemplo, la primera. En el siguiente trozo de código se puede ver cómo ordenar una matriz aleatoria de enteros en base a su primera columna.

data = randi(40, 6, 4)

[~, s] = sort(data(:, 1))
data(s, :)

En una ejecución aleatoria se obtienen los valores.

data =

     9    10    18    11
    13     7     8    17
    19    10    37    24
    10    18    40    11
    34    13    18    25
     8    37     5    29


s =

     6
     1
     4
     2
     3
     5


ans =

     8    37     5    29
     9    10    18    11
    10    18    40    11
    13     7     8    17
    19    10    37    24
    34    13    18    25

Ordenar una matriz en Matlab en base a una fila

La ordenación también se puede hacer en base a una fila, para ello simplemente se ha de ordenar la fina en lugar de la columna. Esto se puede hacer con el siguiente ejemplo:

[~, s] = sort(data(1, :))
data(:, s)

Con el que se obtiene.

s =

     1     2     4     3


ans =

     9    10    11    18
    13     7    17     8
    19    10    24    37
    10    18    11    40
    34    13    25    18
     8    37    29     5

Ordenar en orden descender

Finalmente, se puede indicar a la función sort() que ordene los elementos de forma descentre simplemente pasando la palabra desc como segundo parámetro de la función. Lo que se puede aplicar al ejemplo anterior.

[~, s] = sort(data(:, 1), 'desc')
data(s, :)
s =

     5
     3
     2
     4
     1
     6


ans =

    34    13    18    25
    19    10    37    24
    13     7     8    17
    10    18    40    11
     9    10    18    11
     8    37     5    29

Conclusiones

En esta entrada se ha visto cómo combinar la funciónsort() con los métodos para seleccionar elementos en para ordenar los elementos de una matriz en base a una fila o columna. Una tarea que es bastante habitual. Por ejemplo, a la hora de ordenar los resultados de unas medidas.

Este truco también se puede utilizar para ordenar los elementos de un vector en base a otro que tenga el mismo tamaño. Lo que es de utilidad cuando se tienen datos relacionados en dos elementos.

Imágenes: Pixabay (congerdesig)

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

De la Regresión Logística al Scorecard: La Transformación Matemática

En un entrada previa explicamos qué son el WOE y el IV y por qué…

1 día ago

Analytics Lane lanza la versión 1.1 del laboratorio con nuevas suites de CLV y Scoring

Seguimos evolucionando el laboratorio de Analytics Lane y hoy lanzamos la versión 1.1, disponible en:…

2 días ago

Interés compuesto: la fuerza que multiplica tu dinero (y los errores que la anulan)

“El interés compuesto es la octava maravilla del mundo. El que lo entiende lo gana…

6 días ago

Cómo comparar datos con barras en Matplotlib: agrupadas, apiladas y porcentuales

Tienes los datos de ventas de tres productos en dos años distintos y quieres saber…

1 semana ago

Costes hundidos en ciencia de datos: cuándo mantener un modelo y cuándo migrar

Imagina la situación. Tu equipo lleva tres años con un modelo en producción. No es…

2 semanas ago

WOE e IV: La Base Matemática del Credit Scoring

Cuando un banco evalúa una solicitud de crédito necesita responder a una pregunta aparentemente simple:…

2 semanas ago

This website uses cookies.