Matemáticas con Numpy
Operaciones aritméticas con un mismo valor.
Todas las operaciones aritméticas básicas (sumar, restar, multiplicar y
dividir) que se puedan hacer con matrices se pueden hacer en Numpy. Se puede
operar un único valor con todos los elementos del array, elemento a
elemento, usando los signos matemáticos + (sumar), - (restar), *
(multiplicar), / (dividir), ** (potenciación), // (división, cociente como
entero).
Puedes encontrar todas las operaciones matemáticas que se pueden hacer con
Numpy en su documentación en
este enlace.
Por ejemplo:
>>> import numpy as np
>>> a=np.array([3,4,5])
>>> b=3
>>> print(a*b)
[ 9 12 15]
>>> print(a+b)
[6 7 8]
>>> print(a-b)
[0 1 2]
>>> print(a/b)
[1. 1.33333333 1.66666667]
>>> print(a**b)
[ 27 64 125]
>>> print(a*a)
[ 9 16 25]
Operaciones elementales.
Esta biblioteca nos proporciona un montón de funciones matemáticas elementales
(seno, coseno, exponencial, raíz cuadrada, logaritmos...) que se pueden
utilizar con matrices o tambien con un solo elemento o número. Podrías
utilizar Numpy como alternativa al módulo maths que viene por defecto en
Python.
Veámoslo con ejemplos:
Creemos una matriz con 8 elementos que se distribuyan de forma uniforme desde
-pi a +pi. Pi lo obtendremos usando el módulo math de Python.
>>> import numpy as np, math
>>> a=np.linspace(-math.pi,math.pi,8)
>>> print(a)
[-3.14159265 -2.24399475 -1.34639685 -0.44879895 0.44879895 1.34639685
2.24399475 3.14159265]
Y fácilmente podemos calcular el seno de cada uno de los valores:
>>> print(np.sin(a))
[-1.22464680e-16 -7.81831482e-01 -9.74927912e-01 -4.33883739e-01
4.33883739e-01 9.74927912e-01 7.81831482e-01 1.22464680e-16]
Esto no lo podríamos hacer de forma tan sencilla usando el módulo math, porque
te daría error.
>>> print(math.sin(a))
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-8-6e5434b920e7> in <module>
----> 1 print(math.sin(a))
TypeError: only size-1 arrays can be converted to Python scalars
Operaciones con matrices de la misma dimensión.
Al igual que hemos visto antes, podemos hacer las mismas operaciones
aritméticas sencillas con matrices que tengan la misma dimensión.
Por ejemplo creamos una matriz de dimensiones 2x3 llamada "a" con unos valores
ya dados y otra "b" de dimensiones 2x3 rellena con unos. Y vamos a sumarlas y
restarlas elemento a elemento.
Y al igual que con la suma y la resta podríamos hacerlo con la
multiplicación y división.
Operaciones con matrices de diferentes dimensiones.
Aunque para sumar o restar matrices estas tienen que ser de la misma
dimensión, lo que si nos permite Numpy es "sumar o restar" arrays de diferentes
dimensiones siempre que el array resultante tenga la misma dimensión que uno
de los arrays operados. Y lo hace de la siguiente forma. Veámoslo con un
ejemplo.
El array "a" tiene una dimensión de (2,3) y el "b" de (3,1). Si las sumamos,
Numpy sumará elemento a elemento la primera fila de "a" con los elementos de
"b" y luego sumará la segunda fila de "a" con los elemnentos de "b" lo que nos
dará el array "c"
Para multiplicar matrices tenemos que tener en cuenta que el
numero de columnas de la primera matriz tiene que ser igual al numero de filas
de la segunda.
Si utilizamos las matrices del ejemplo anterior podemos multiplicarlas con el
siguiente código ya que se cumple la condición que hemos dicho a=(2,3)
b=(3,1). El número de columnas de a es igual al numero de filas de b.
y lo mismo ocurriría con la división.
Funciones matemáticas para operar con arrays.
Después de haber visto las operaciones básicas que podemos hacer con los
arrays, Numpy tiene también una gran cantidad de funciones que podemos aplicar
a las matrices. Puedes ver en
este enlace
la relación de ellas.
Básicamente todas funcionan de la misma forma así que veamos algunas de ellas.
Por ejemplo, si queremos saber el valor máximo de un array podemos utilizar la
función max()
>>> import numpy as np
>>> a=np.array([[2,5,7],[4,3,8]])
>>> print(np.max(a))
8
u obtener la suma de todos los valores del array con la función sum()
>>> import numpy as np
>>> a=np.array([[2,5,7],[4,3,8]])
>>> print(np.sum(a))
29
u operaciones estadísticas como obtener la media de los elementos de un array
con mean()
>>> import numpy as np
>>> a=np.array([[2,5,7],[4,3,8]])
>>> print(np.mean(a))
4.833333333333333
Hay muchísimas funciones para cualquier cosa que necesites hacer con los array
con lo cual lo mejor es consultar la documentación y ver la información sobre
la función que buscas.
Gráficos con Numpy.
Esta librería se integra perfectamente con MatPlotLib.pyplot a la hora
de realizar gráficos de forma sencilla con nuestros datos. Solo tenemos
que pasar los arrays con los datos a MatPlotLib.pyplot que se encargará de
todo.
Por ejemplo si queremos hacer una gráfica de la función seno, la podríamos
realizar de la siguiente manera.
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0,2*np.pi,200)
y = np.sin(x)
plt.plot(x,y,label='funcion seno')
plt.legend()
plt.xlabel('Eje de las X')
plt.ylabel('Eje de las Y')
plt.title('Función seno Radianes')
plt.show()
Puedes encontrar más información sobre realizar graficos en Python con
MatPlotLib en
este post.
Vamos a repasar lo que hemos visto hasta ahora y ampliar de forma somera
algunos conceptos, a forma de resumen donde puedas buscar las operaciones más
comunes que se pueden hacer con arrays.
OPERACIONES ELEMENTO A ELEMENTO
Hemos visto que en las operaciones que se realizan entre un array y un
escalar, todas se hacen elemento a elemento.
Con escalares
>>> a = np.array([1, 2, 3, 4])
>>> a + 1
array([2, 3, 4, 5])
>>> 2**a
array([ 2, 4, 8, 16])
Toda las operaciones aritméticas son elemento a elemento
>>> b = np.ones(4) + 1
>>> a - b
array([-1., 0., 1., 2.])
>>> a * b
array([ 2., 4., 6., 8.])
>>> j = np.arange(5)
>>> 2**(j + 1) - j
array([ 2, 3, 6, 13, 28])
Advertencia Importante: Multiplicación de arreglos
no es multiplicación matricial:
>>> a = np.array([[2,0,1],[3,0,0],[5,1,1]])
>>> b = np.array([[1,0,1],[1,2,1],[1,1,0]])
>>> print(a*b)
[[2 0 1]
[3 0 0]
[5 1 0]]
>>> # ¡no es multiplicación matricial!
Si queremos multiplicar matrices tenemos que usar el método np.dot()
>>> print(np.dot(a,b))
[[3 1 2]
[3 0 3]
[7 3 6]]
Comparaciones de Arrays.
>>> a = np.array([1, 2, 3, 4])
>>> b = np.array([4, 2, 2, 4])
>>> a == b
array([False, True, False, True], dtype=bool)
>>> a > b
array([False, False, True, False], dtype=bool)
Operaciones Lógicas
>>> a = np.array([1, 1, 0, 0], dtype=bool)
>>> b = np.array([1, 0, 1, 0], dtype=bool)
>>> np.logical_or(a, b)
array([ True, True, True, False], dtype=bool)
>>> np.logical_and(a, b)
array([ True, False, False, False], dtype=bool)
Transpuesta de un matriz
La transpuesta de la matriz:
[[ 1, 2]
[ 3, 4]
[ 5, 6]]
será:
>>> a = np.array([[1,2],[3,4],[5,6]])
>>> a.T # también, a.transpose()
array([[1, 3, 5],
[2, 4, 6]])
REDUCCIONES BÁSICAS.
Sumando los elementos de un array.
>>> x = np.array([1, 2, 3, 4])
>>> np.sum(x)
10
>>> x.sum()
10
Sumando los elementos de un array por filas o por columnas.
Para el tema de los ejes tienes que tener en cuenta los siguiente:
axis = 0 Se refiere al vertical. Suma los elementos de la misma columna.
axis = 1 Se refiere al eje horizontal. Suma los elementos de la misma fila.
Vamos a aplicarlo a un ejemplo.
>>> x = np.array([[1, 1], [2, 2]])
>>> x
array([[1, 1],
[2, 2]])
>>> x.sum(axis=0) # columna (primera dimensión)
array([3, 3])
>>> x[:, 0].sum(), x[:, 1].sum()
(3, 3)
>>> x.sum(axis=1) # fila (segunda dimensión)
array([2, 4])
>>> x[0, :].sum(), x[1, :].sum()
(2, 4)
Reducciones Estadísticas.
Las reducciones estadísticas funcionan de la misma manera que las sumas.
Veamos unos ejemplos con las funciones estadísticas más significativas.
Calculo de la media.
>>> x = np.array([1, 2, 3, 1])
>>> y = np.array([[1, 2, 3], [5, 6, 1]])
>>> x.mean()
1.75
Cálculo de la mediana.
>>> np.median(y, axis=1)
array([ 2., 5.])
Cálculo de la desviación estandar
>>> x.std() # desviación estándar de población (no de la
muestra).
0.82915619758884995
Valor mínimo y máximo de un array.
>>> x = np.array([1, 3, 2])
# Valor mínimo
>>> x.min()
1
# Valor máximo
>>> x.max()
3
x.argmin() # índice del valor mínimo en el array
0
x.argmax() # índice del valor máximo en el array
1
Operaciones Lógicas.
numpy.all() -> Comprueba si todos los elementos a lo largo de
un eje dado son igual a True.
>>> y = np.array([1,2,3,4,0,9])
>>> np.all(y)
False
numpy.any() -> Comprueba si al menos algún elemento del array
a lo largo de un eje dado es igual a True.
>>> np.any(y)
True
Ordenando datos.
- Ordenando los elementos a lo largo de un eje.
>>> a = np.array([[4, 3, 5], [1, 2, 1]])
>>> b = np.sort(a, axis=1)
>>> b
array([[3, 4, 5],
[1, 1, 2]])
¡ Ten en cuenta que se ordenan filas y columnas por separado!
- Ordenando y reemplazando los elementos.
>>> a.sort(axis=1)
>>> a
array([[3, 4, 5],
[1, 1, 2]])
No hay comentarios:
Publicar un comentario