Introducción al análisis de datos en Python con Numpy

Operaciones básicas

La clase array es extremadamente flexible y eso es en gran parte porque nos permite todo tipo de operaciones.

Por ejemplo las operaciones suma y resta requieren que los arrays tengan la misma forma, es decir, mismo número y tamaño de las dimensiones.

En el caso del producto, la divisón y la potencia se pueden operar arrays de las mismas dimensiones si el número de columnas de la primera coincide con el número de filas de la segunda.

Suma

# %%
import numpy as np

# Dados dos arrays
arr_1 = np.array([1,2,3,4])
arr_2 = np.array([5,6,7,8])

# Los sumamos
arr_1 + arr_2

Si no tienen la misma forma no podemos sumarlos:

arr_3 = np.array([9,10])

arr_2 + arr_3

Resta

arr_2 - arr_1

¿Qué ocurriría si restamos un array a si mismo?

arr_1 - arr_1

Pues que obtenemos un array con todos los valores a cero.

Producto

arr_1 * arr_2

El producto entre arrays se basa en multiplicar cada elemento de una array por el elemento en la misma posición del otro.

  • 1x5 = 5
  • 2x6 = 12
  • 3x7 = 21
  • 4x8 = 32

También podemos multiplicar un array por un número:

arr_1 * 2

En este casi sería equivalente a un array con una fila y una columna 1x1:

arr_4 = np.array(2)
arr_1 * arr_4

División

arr_1 / arr_2

Igual que el producto, la división entre arrays se basa en dividir cada elemento de un array por el elemento en la misma posición del otro.

  • 1/5 = 0.2
  • 2/6 = 0.33...
  • 3/7 = 0.42...
  • 4/8 = 0.5

También podemos dividir todos sus elementos por un número:

arr_1 / 2
  • 1/2 = 0.5
  • 2/2 = 1
  • 3/2 = 1.5
  • 4/2 = 2

Algo interesante que podemos hacer con la división es conseguir el arreglo inverso o recíproco dividiendo 1 entre el array:

1 / arr_1

Es equivalente hacer la potencia a -1 del array:

arr_1 ** -1

Lamentablemente no podemos elevar a un entero negativo, pero sí podemos indicar la elevación a -1. e indicar así que queremos usar un decimal:

arr_1 ** -1.

Ya que estamos con las potencias, también podemos hacer potencias entre arrays.

Potencia

arr_1 ** arr_2

Como es normal, se basa en realizar la potencia entre los valores que comparten posición en los arrays:

  • 1**5 = 5
  • 2**6 = 64
  • 3**7 = 2187
  • 4**8 = 65536

Operaciones en arrays de 2D

Todo lo que hemos visto aplica también a los arrays de dos dimensiones:

arr_5 = np.array([[1,2],[3,4]])
arr_6 = np.array([[5,6],[7,8]])

arr_5 + arr_6

Como es normal se basa en realizar la operación entre los valores que comparten posición en los arrays:

[ [1+5, 2+6], [3+7, 4+8] ] = [ [6, 8], [10, 12] ]

De igual forma funcionaría el producto, división y potencia por un número:

arr_5 * 3

[ [1x3, 2x3], [3x3, 4x3] ] = [ [3, 6], [9, 12] ]

Como hemos comentado antes podemos multiplicar, dividir y potenciar matrices siempre que el número de columnas de la primera coincida con el número de filas de la segunda:

arr_7 = np.array([5,10])

arr_5 * arr_7

[ [1x5, 2x10], [3x5, 4x10] ] = [ [5, 20], [15, 40] ]

¡Tanto estudiar álgebra de matrices para que al final un programa lo haga automáticamente!