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

El Binning en Credit Scoring: El Arte de Discretizar Variables

Si el WOE y el IV son la base matemática del credit scoring, el binning…

5 horas ago

Analytics Lane lanza la versión 1.2 del laboratorio con nuevas herramientas de ajuste de curvas y cálculo matricial

Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…

4 días ago

Cómo comparar tendencias con gráficos de líneas en Matplotlib: guía práctica paso a paso

Tienes los datos de tráfico web de los últimos cinco meses desglosados por canal: orgánico,…

1 semana ago

Calibración vs Discriminación en Credit Scoring: diferencias clave y cómo evaluarlas

Imagina que construyes un modelo de credit scoring y obtienes un Gini de 0,65. Un…

2 semanas ago

This website uses cookies.