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]]) 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])
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.
np.apply_along_axis() con otros tipos de objetosOtro 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])
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)
Si revisáis código o documentación de otros programadores, tarde o temprano os toparéis con dos…
Los dos artículos anteriores cubrieron el CLV clásico —una fórmula útil pero que trata a…
Hay un momento muy concreto en la vida de casi todo análisis: el código que…
Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…
Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…
En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…
This website uses cookies.