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

== vs is en Python: la diferencia que causa bugs misteriosos

Hay un bug que aparece una y otra vez en código Python, tan sutil que…

21 horas ago

Curiosidad: El puerto 80 y los números de puerto

Durante décadas, cuando escribías una dirección web y pulsabas Intro, tu navegador hacía algo que…

6 días ago

Cómo Proyectar Cuándo Alcanzarás la Independencia Financiera

La independencia financiera es el punto en el que tus inversiones generan suficientes rendimientos para…

1 semana ago

Cómo Elegir el Test de Hipótesis Correcto para tus Datos

Tienes dos grupos de datos y quieres saber si son estadísticamente distintos. O tienes una…

2 semanas ago

Tuplas vs Listas en Python: parecen lo mismo, pero no

A primera vista, tuplas y listas son casi idénticas. Ambas guardan colecciones ordenadas de elementos.…

2 semanas ago

Qué significa realmente “calidad de datos”

"Nuestros datos no tienen buena calidad." Escuchas esto constantemente en reuniones. El problema es que…

3 semanas ago

This website uses cookies.