Parte2 Numpy
Parte2 Numpy
Parte2 Numpy
ORIENTADO A LA RESOLUCIÓN DE
PROBLEMAS DE OPTIMIZACIÓN EN
INGENIERÍA
(VI Edición, 2021)
Daniel Gutiérrez Reina, [email protected]
Vamos a comenzar a aprender los paquetes de Python más utilizados para el análisis de datos.
Segundo módulo del curso
Numpy (2 horas aprox.):
1) Creación y manipulación de vectores o Arrays (tensores).
2) Operaciones con arrays.
3) Algebra lineal (algunas operaciones).
4) Slicing.
5) Funciones universales.
6) Comparaciones y operaciones booleanas.
7) Broadcasting y filtrado.
8) Manejo de archivos.
9) Vectorización.
10) Módulo de números aleatorios.
11) Temporización.
Paquete o librería numpy
Cálculo numérico y vectores y matrices (entre otras muchas cosas). Sin lugar a
dudas uno de los paquetes más utilizados de Python.
OBJETO MUTABLE!!!
Paquete o librería numpy
Estructura de datos (sacado del paper de nuture):
ATRIBUTOS:
Características:
• En la listas de Python tenemos una referencia memoria, a su vez cada elemento de la lista
tiene tipo y una dirección de memoria distinto → Poco eficiente para realizar operaciones.
Vamos a meternos en faena con Numpy
Podemos convertir cualquier secuencia en array o vector.
Abrir numeros2.py
RESUMEN DE ATRIBUTOS
• .shape: Nos permite definir/obtener las dimensiones del array. Recibe como parámetro de entrada una tupla que
indica las dimensiones.
• .strides: Nos indica el número de bytes que tenemos que salta para movernos en cada dimensión (fila o columnas)
Abrir numeros2.py
• .reshape(): devuelve un array con los mismos datos con otra forma.
https://numpy.org/devdocs/reference/arrays.ndarray.html#constructing-arrays
Vamos a meternos en faena con Numpy
Tipos de datos que podemos almacenar.
Vamos a meternos en faena con Numpy
Arrays, matrices y tensores
Vamos a meternos en faena con Numpy
Arrays, matrices y tensores
Creación y Manipulación de arrays
Abrir numeros3.py
• np.arange(start, stop, step): crea un array desde el valor start hasta el stop con el paso dado por step.
• np.linspace(start, stop, samples): crea un array desde el valor start hasta el valor stop espaciados
linealmente según el número de muestras dado por samples.
• np.ones(l): crea un array de unos de tamaño l. También se puede crear un array multi dimencional
(matriz) → np.ones([N, M]), N filas por M columnas.
• np.full((2,2), np.pi): crea un array con la forma (2, 2) y con todas las posiciones rellenas con el valor pi
https://docs.scipy.org/doc/numpy/reference/routines.array-creation.html
Creación y Manipulación de arrays
MANIPULACIÓN DE ARRAYS (Algunos métodos DE NUMPY)
• np.delete(v1, [0, 1]): elimina elementos del array (tenemos que pasar la posición o posiciones)
https://docs.scipy.org/doc/numpy/reference/routines.array-manipulation.html
Operaciones matemáticas con arrays
Abrir numeros4.py
Ojo que las dimensiones de los arrays tiene que ser las mismas!
Más información:
https://docs.scipy.org/doc/numpy1.13.0/reference/routines.linalg.htm
l
Algebra lineal: Módulo linalg
Ejercicio:
2 1 3 0 1 3
𝐴= 5 4 0 𝐵= 5 4 0
0 1 1 1 1 1
𝑀1 = 𝐴 + 𝐵, 𝑀2 = 𝐴 ∗ 𝐵, 𝑀3 = det 𝐴 , 𝑀4 = 𝐴−1 𝑦 𝑀5 = 𝐴𝑇
Más información:
http://docs.scipy.org/doc/numpy/reference/routines.linalg.html
Slicing con numpy arrays …
El slicing funciona igual que en las listas.
Abrir numeros6.py
Slicing con numpy arrays …
Vistas de los array (cuidado!) → shallow copy
Abrir numeros7.py
Vista:
→ Funciones que operan sobre todo los elementos del array y devuelven un
valor. Ejemplos típicos → valor medio, mediana, desviación típica, etc.
Abrir numeros9.py
Funciones universales
Parámetro axis:
axis 0
axis 1
→ No debemos utilizar los operadores and y or, ya que solo sirven para comprobar si un
objeto es verdadero o falso, no para un conjunto de elementos como un array.
https://docs.scipy.org/doc/numpy/reference/routines.io.html#text-files
https://docs.scipy.org/doc/numpy/reference/routines.statistics.html
Broadcasting en Numpy
Extensión de los arrays para realizar operaciones
→ Abrir numeros13.py
Reglas:
Filtrado de array
• Para el filtrado se utiliza para operación de broadcasting.
• La idea es filtrar los elementos de un array mediante una operación booleana que
mediante la operación de broadcasting generará una máscara de elementos (un array con
elementos True o False).
• np.nonzero(array) → devuelve los índices de los elementos que no son cero del array
→ Abrir numeros14.py
“Vectorización” de funciones
Podemos hacer una función que está definida para recibir variables que no
son arrays para que funcione con arrays.
np.vectorize(<funcion>)
→ Abrir numeros15.py
Módulo de números aleatorios
Numpy.random → Submódulo de números aleatorios.
https://docs.scipy.org/doc/numpy/reference/routines.random.html
→ Abrir numeros16.py
Tiempos de ejecución de funciones: Numpy
arrays Vs lista → Módulo timeit
MODULO TIMEIT → Permite la temporización de trozos de código.
→ Abrir script17.py
Más información:
https://docs.python.org/2/library/timeit.html
Bibliografía