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

Curiosidad: La Paradoja de Simpson, o por qué no siempre debes fiarte de los promedios

En ciencia de datos y estadística, los promedios y porcentajes son herramientas fundamentales para resumir…

22 horas ago

Copias de seguridad automáticas en SQL Server con rotación de archivos

Las bases de datos son el corazón de casi cualquier sistema de información moderno. Ya…

3 días ago

Curiosidad: La Ley de Twyman y la trampa de los datos “interesantes”

En ciencia de datos, pocas cosas llaman más la atención de los científicos de datos…

1 semana ago

Cómo calcular el tamaño de la muestra para encuestas

Calcular adecuadamente el tamaño de la muestra es una parte esencial en el diseño de…

1 semana ago

Curiosidad: El origen del análisis exploratorio de datos y el papel de John Tukey

Hoy en día, cuando pensamos en ciencia de datos, lo primero que nos viene a…

2 semanas ago

Cómo extender el tamaño de un disco en Rocky Linux 9 usando growpart y LVM

Ampliar el espacio de almacenamiento en un sistema Linux es una tarea habitual y crítica…

2 semanas ago

This website uses cookies.