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.
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.
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
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
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
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)
En las cuatro entregas anteriores recorrimos los disparates más folclóricos del género: faldas que predicen…
En Analytics Lane seguimos evolucionando nuestras herramientas y damos un paso más con el lanzamiento…
Cuando hablamos de clustering, lo primero que viene a la mente suele ser k-means. Pero…
Cualquier país desarrollado tiene sus propios indicadores folclóricos. España, por motivos que tienen mucho que…
Entras a la web de tu banco. En la página principal, un banner llamativo: “Depósito…
Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…
This website uses cookies.