
Al tener una matriz de Numpy en memoria puede darse la situación de que sea necesario calcular una función sobre los elementos de una fila o columnas. Por ejemplo, algo tan básico como sumar todos los elementos por columna. En estas situaciones se puede utilizar la función np.apply_along_axis()
, con la que se puede aplicar una función sobre una fila o columna de una Array de Numpy.
Para trabajar en el resto de la entrada se va a crear una matriz de 3 por 3 con la que se podrá probar lo trucos explicados.
import numpy as np matrix = np.arange(1, 10).reshape(3,3) matrix
array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
La función np.apply_along_axis()
La función np.apply_along_axis()
permite aplicar una función sobre una de las dimisiones de un Array de Numpy. Por lo que es una herramienta con muchas posibilidades. La función tiene tres parámetros, en el primero se indica la función que se desea aplicar, en la segunda el eje sobre el que se desea aplicar la función y finalmente el objeto de Numpy. Obteniéndose como salida de la función un Array de Numpy con un eje menos que el original.
Por ejemplo, para sumar las columnas de una matriz se puede escribir en Python la siguiente línea de código.
np.apply_along_axis(sum, 0, matrix)
array([12, 15, 18])
Es fácil comprobar que el resultado es correcto. Como se puede ver en el ejemplo el eje se indica de forma numérica, en el caso de las matrices para operar sobre las columnas se utiliza 0 y 1 para operar sobre las filas. Así para sumar sobre una las columnas solamente se tiene que cambiar el segundo parámetro.
np.apply_along_axis(sum, 1, matrix)
array([ 6, 15, 24])
Las funciones a utilizar en np.apply_along_axis()
Por lo visto np.apply_along_axis()
es una herramienta muy interesante. Pero ¿qué funciones se pueden utilizar como entrada? Se puede utilizar cualquier función de Python que admite como entrada un vector unidimensional y devuelva un escalar. Incluyente tanto las funciones nativas del lenguaje como cualquier que se puede escribir. Por lo que se pueden utilizar la mayoría de las funciones estadísticas para obtener la media, la desviación estándar, los máximos o mínimos, etc.
Utilizar np.apply_along_axis()
con otros tipos de objetos
Otro punto importante es que, en el caso de tener una matriz en una lista de listas de Python, no es necesario convertir esta en un Array de Numpy antes de poder trabajar con ella. np.apply_along_axis()
acepta como entrada cualquier tipo de objeto que se puede convertir a un Array de Numpy, realizando la conversión de tipos internamente.
np.apply_along_axis(sum, 1, [[1,2],[2,3]])
array([3, 5])
Conclusiones
Cuando se tiene una matriz y es necesario obtener los estadísticos de las filas o columnas la función np.apply_along_axis()
es de gran ayudar. Ya que permite aplicar una función sobre una fila o columna de una Array de Numpy o cualquier otro objeto que se pueda convertir a este. Evitando de este modo la necesidad de usar bucles o el método map
que pueden ser un poco más complejos para principiantes.
Imágenes: Pixabay (Marit Welker)
Deja una respuesta