Python

NumPy: Cómo ordenar una matriz NumPy en Python

En NumPy existe el método np.sort() con el que se puede ordenar una matriz NumPy. Un método que ofrece varias opciones las que discutiremos a continuación.

Ordenar un vector

En primer lugar, podemos crear un vector de números enteros ordenados aleatoriamente. Lo que se puede conseguir utilizando el método np.random.shuffle() sobre un vector que se ha creado con np.arange(). Para que el resultado sea siempre el mismo, se puede fijar el valor de la semilla con el método np.random.seed().

import numpy as np

np.random.seed(0)

arr = np.arange(10)
np.random.shuffle(arr)
[2, 8, 4, 9, 1, 6, 7, 3, 0, 5]

Ahora para ordenar el vector solamente tenemos que usar el método sort() del propio objeto.

arr.sort()
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Obtener el vector ordenado en un nuevo objeto

El método sort() del vector trabaja modificando el propio objeto. En el caso de que necesitemos que el vector ordenado sea un objeto nuevo, se puede utilizar el método de la librería y asignar el resultado al nuevo objeto. Por ejemplo, volviendo a desordenar el objeto se pueden obtener los dos valores.

np.random.shuffle(arr)

sorted_arr = np.sort(arr)

En donde arr es [3 5 1 2 9 8 0 6 7 4], mientras que sorted_arr es [0 1 2 3 4 5 6 7 8 9].

Ordenar una vector en orden inverso

Si queremos ordenar los valores de mayor a menor se tiene que hacer invirtiendo los elementos del vector una vez ordenados. Ya que actualmente el método sort() de NumPy no dispone de una opción para hacer esto directamente.

reverse_arr = np.sort(arr)[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Cambiar el método de ordenación

Por defecto sort() emplea el algoritmo de ordenación quicksort, aunque es posible cambiarlo por otros. Pudiéndose elegir alguno de los algoritmos que soporta actualmente: quicksort, mergesort, heapsort y stable. La opción del método para seleccionar uno de los algoritmos es kind.

quicksort = np.sort(arr, kind='quicksort')
mergesort = np.sort(arr, kind='mergesort')
heapsort = np.sort(arr, kind='heapsort')
stable = np.sort(arr, kind='stable')

En todos los casos se obtiene el mismo resultado. Aunque esta opción sea posiblemente una de las que menos se utilizan, pero es interesante conocerla.

Ordenar una matriz NumPy

Finalmente, se puede ver cómo ordenar una matriz NumPy. Para lo que se puede crear una a partir de un vector con el método reshape.

mat = np.arange(12).reshape((3, 4))
np.random.shuffle(mat)
[[ 4  5  6  7]
 [ 0  1  2  3]
 [ 8  9 10 11]]

La única diferencia a la hora de ordenar una matriz respecto a un vector es la necesidad de indicar el eje de ordenación. Mediante el método axis. En el caso de querer ordenar por columnas este es 1.

mat.sort(axis=1)
[[ 4  5  6  7]
 [ 0  1  2  3]
 [ 8  9 10 11]]

Mientras que para ordenar por filas el valor que se debe indicar es 0.

mat.sort(axis=0)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

Conclusiones

En esta entrada hemos vistos algunas de las diferentes formas que tenemos para ordenar una matriz NumPy en Python. Operaciones que son bastante habituales en el día a día. ¿Te parecen útiles estos métodos de ordenación? ¿Usas algún truco diferente? Puede dejar tus opiniones a continuación en la sección de comentarios.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: NumPy

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…

1 día 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.