En el último artículo, aprendimos muchas formas diferentes en las que podemos crear ndarrays. Ahora que sabemos cómo crear arrays de NumPy es momento de empezar a jugar con ellos.
Aprenderemos a realizar operaciones básicas, una tarea que puedes dividir en 3 categorías:
- Operaciones entre arrays del mismo tamaño.
- Operaciones entre un array y un escalar.
- Operaciones entre arrays de diferentes tamaños.
El tercer escenario se conoce como broadcasting, y no lo trataremos en este artículo, en su lugar, nos enfocaremos en los primeros dos.
Genial, empecemos.
Operaciones usando ndarrays del mismo tamaño
Las operaciones entre arrays del mismo tamaño se aplican de forma elemento por elemento. Crearemos dos arrays y veremos cómo funcionan la resta, suma, multiplicación y división.
import numpy as np
arr_1 = np.array([1, 2, 3, 4, 5])
arr_2 = np.array([20, 30, 40, 50, 60])
# Suma elemento por elemento de dos arrays
sum_result = arr_1 + arr_2
print(sum_result)
[21 32 43 54 65]
# Resta elemento por elemento de dos arrays
sub_result = arr_2 - arr_1
print(sub_result)
[19 28 37 46 55]
# Multiplicación elemento por elemento de dos arrays
mult_result = arr_1 * arr_2
print(mult_result)
[ 20 60 120 200 300]
# División elemento por elemento de dos arrays
div_result = arr_1 / arr_2
print(div_result)
[0.05 0.06666667 0.075 0.08 0.08333333]
# Potencia elemento por elemento
pow_result = arr_2 ** arr_1
print(pow_result)
[ 20 900 64000 6250000 777600000]
También puedes realizar comparaciones entre dos arrays. El resultado es un array booleano donde cada entrada es el resultado de realizar una comparación elemento por elemento:
arr_1 = np.array([1, 10, 2, 20])
arr_2 = np.array([50, 5, 30, 3])
# Devolver True si los elementos en el primer array son más grandes que los del segundo array
comparison_result = arr_1 > arr_2
print(comparison_result)
[False True False True]
Ahora, hay dos cosas adicionales que notar.
La primera es que puedes encadenar operaciones con tantos arrays como quieras:
arr_1 = np.array([1,4,7])
arr_2 = np.array([2,5,8])
arr_3 = np.array([3,6,9])
sum_result = arr_1 + arr_2 + arr_3
print(sum_result)
[ 6 15 24]
La segunda es que puedes usar el mismo array varias veces cuando defines la operación:
arr = np.array([1, 5, 10])
result = arr * arr - arr # Esto aplica la operación x^2 - x a cada entrada
print(result)
[ 0 20 90]
Bien, ahora veamos qué pasa cuando realizamos estas operaciones con un array y un escalar.
Operaciones usando un array y un escalar
Las operaciones entre un array y un escalar son muy intuitivas: se realizan sobre cada entrada en el array y el escalar, y el resultado es un array booleano. Esto es mucho más fácil de entender con ejemplos:
arr = np.arange(1, 6) # Generar entradas de 1 a 5
print(arr)
[1 2 3 4 5]
# Suma de un array y un escalar
sum_result = arr + 10
print(sum_result)
[11 12 13 14 15]
# Resta entre un array y un escalar
sub_result = arr - 1
print(sub_result)
[0 1 2 3 4]
# Como el resto de las operaciones, la resta funciona como esperarías si inviertes el orden
sub_result = 1 - arr
print(sub_result)
[ 0 -1 -2 -3 -4]
# Multiplicación entre un array y un escalar
mult_result = arr * 5
print(mult_result)
[ 5 10 15 20 25]
# División entre un array y un escalar
div_result = arr / 2
print(div_result)
[0.5 1. 1.5 2. 2.5]
# Otra vez, el orden de los elementos es importante, tal como esperarías
div_result = 2 / arr
print(div_result)
[2. 1. 0.66666667 0.5 0.4 ]
Las comparaciones entre un escalar funcionan como esperarías. La comparación devuelve un array booleano con el resultado de evaluar la comparación sobre cada elemento en el array original.
result = arr > 3
print(result)
[False False False True True]
Bastante sencillo, ¿no?
Una de las mejores cosas sobre NumPy es lo consistente y usualmente obvio que es, y estas operaciones básicas son prueba de eso.
Saber cómo realizar operaciones básicas es la base que necesitas para construir soluciones más elaboradas, y ahora tienes eso cubierto. En el siguiente artículo, aprenderemos sobre un tema extremadamente importante: Indexación y slicing. Nos vemos entonces.
¡Gracias por leer!
Qué hacer después
- Comparte este artículo con amigos y colegas. Gracias por ayudarme a llegar a personas que podrían encontrar esta información útil.
- Puedes encontrar el código fuente para esta serie en este repo.
- Este artículo está basado en el libro: Python for Data Analysis.
- Envíame un email con preguntas, comentarios o sugerencias (está en la página Autor)