Parte2 Numpy

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 33

INTRODUCCIÓN A PYTHON

ORIENTADO A LA RESOLUCIÓN DE
PROBLEMAS DE OPTIMIZACIÓN EN
INGENIERÍA
(VI Edición, 2021)
Daniel Gutiérrez Reina, [email protected]

Ignacio González Prieto, [email protected]

Mario Durán Martínez, [email protected]


Bloques del curso

 Bloque I: Introducción a Python y sus librerías para


análisis de datos (20 horas)
 Bloque II: Introducción a los algoritmos genéticos (10
horas)
Partes del primer bloque

 Parte I (Python General): Aprender nociones básicas sobre programación en


Python. Tipos de objetos (listas, tuplas, diccionarios, etc.), manejo de
funciones, control de flujo, y mucho más!!! → 12 horas aprox.
 Parte II (Numpy): Vectores o arrays multi dimensionales en Python. → 2,5
horas aprox.
 Parte III (Maplotlib): Representación gráfica en Python. → 2,5 hora aprox.
 Parte IV (Pandas): Manejo de datos en Python (dataframe). → 2,5 horas
aprox.
 Parte V (Scipy): Librería científica → 1 hora.
 Parte VI (Seaborn): Visualización de datos → 1 hora.
Recapitulando … Punto de partida
Hasta ahora sólo hemos aprendido los componentes más básicos de Python.

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.

→Comencemos a trabajar … Mi primer script usando numpy ☺ → Abrir numeros1.py

Los vectores de numpy son diferentes a


las listas:

- Sí podemos sumar, multiplicar y dividir


vectores.

OJO→ seguimos trabajando con


referencia a memoria.

OBJETO MUTABLE!!!
Paquete o librería numpy
Estructura de datos (sacado del paper de nuture):

ATRIBUTOS:

Características:

• Objeto de tamaño fijo.


• Objeto mutable.
• El atributo data-type → define el tipo de los datos del array (todos el mismo tipo)
• Si accedemos a un elemento del array obtengo un array scalar.
Paquete o librería numpy
Diferencia con respecto a la listas de Python:

• 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

• .ndim: Nos indica las dimensiones del array.

• .shape: Nos permite definir/obtener las dimensiones del array. Recibe como parámetro de entrada una tupla que
indica las dimensiones.

• .size: Nos indica el número total de elementos del array.

• .dtype: Nos indica el tipo de los elementos que forman el array.

• .itemsize: Nos indica el tamaño en bytes.

• .strides: Nos indica el número de bytes que tenemos que salta para movernos en cada dimensión (fila o columnas)

• Diferencia entre .resize and .reshape????


Vamos a meternos en faena con Numpy
Podemos convertir cualquier secuencia en array o vector.

Abrir numeros2.py

RESUMEN DE MÉTODOS (ALGUNOS)

• .reshape(): devuelve un array con los mismos datos con otra forma.

• .resize(): cambia la forma y dimensión del array (cambia el original).

• .transpose(): traspuesta del array.

• .flatten(): lo convierte todo a una dimensión.

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

RESUMEN CREACIÓN DE ARRAYS

• 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.zeros(l): crea un array de ceros de tamaño l.

• np.eyes(l) o np.identity(l): crea una matriz identidad de tamaño l.

• np.empty(l): crea una array sin inicializar de tamaño l.

• 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.concatenate(v1, v2): concatena dos arrays.

• np.split(v1, div): divide un array.

• np.append(x): añade un elemento al final de array.

• np.resize(a, new_shape): redimensiona un array.

• np.trim_zeros(v1): eliminar los ceros del principio y final.

• np.unique(v1): encuentra los elementos únicos del array.

• 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

La mayoría de las operaciones son componente a componente entre arrays.

Ojo que las dimensiones de los arrays tiene que ser las mismas!

No olvidar que los array son también punteros. Utilizar


el método copy si no queremos copiar con referencia a
memoria.
Operaciones matemáticas con arrays
Abrir numeros4.py

La mayoría de las operaciones son componente a componente entre arrays.

Función de numpy correspondiente a cada operador.


Algebra lineal: Módulo linalg
Abrir numeros5.py

Más información:
https://docs.scipy.org/doc/numpy1.13.0/reference/routines.linalg.htm
l
Algebra lineal: Módulo linalg
Ejercicio:

Dadas las matrices:

2 1 3 0 1 3
𝐴= 5 4 0 𝐵= 5 4 0
0 1 1 1 1 1

Calcular y guardar en un archivo .txt:

𝑀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:

Cosas a tener en cuenta:

• Las vistas no ocupan nueva memoria.

• Una modificación en la vista afecta al orginal.


Copia:
Funciones universales
Abrir numeros8.py

Son funciones que se aplican elemento a elemento de un array. Sería el mismo


resultado que utilizar map y una función sobre una lista.
https://docs.scipy.org/doc/numpy/reference/routines.math.html
Funciones universales
Funciones de agregación (estadísticas) y parámetro axis:

→ 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 en funciones sobre arrays.


→ Normalmente el atributo axis está disponible en funciones que agregan
elementos del array (sumas, productos, operaciones estadísticas, etc.)

axis 0
axis 1

Axis 0: trabaja sobre las columnas.

Axis 1: trabaja sobre las filas.


Comparaciones
Abrir numeros10.py

→ Las comparaciones en los Arrays de numpy funcionan de forma distinta a las


listas de Python (comparan elemento a elemento hasta que se rompe el
empate).

→ La comparación entre Arrays devuelve un array con el resultado de cada


operación por cada par de elementos de los Arrays.
Operaciones booleanas entre arrays
Abrir numeros11.py

→ 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.

→ Debemos utilizar los operadores & y |


Obtener los valores de un archivo
Abrir numeros12.py

Cada columna de archivo medidas.csv representa las medidas de un sensor distinto.

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).

• La operación de filtrado devuelve un array nuevo (no una vista).

• np.where(condición, x, y) → permite elegir entre dos Arrays en función de una condición.

• 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.

Funciona parecido a la función nativa map, pero utilizando las reglas de


broadcasting de los 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

Es bastante más potente que el módulo nativo random de Python. Contiene


muchos más métodos y distribuciones de probabilidad.

→ 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

 Documentación oficial de numpy:


https://docs.scipy.org/doc/numpy/reference/routines.html

 Aprendiendo a programar en Python. Universidad de Málaga.


https://www.umaeditorial.uma.es/libro/aprendiendo-a-programar-en-
python_2501/

 Python for data analysis O’Reilly


https://www.oreilly.com/library/view/python-for-data/9781491957653/

También podría gustarte