Herramientas de usuario

Herramientas del sitio


clase:iabd:pia:1eval:tema02

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
clase:iabd:pia:1eval:tema02 [2023/11/04 12:21]
admin [Clases]
clase:iabd:pia:1eval:tema02 [2025/03/12 14:36] (actual)
admin [Medición de rendimiento]
Línea 392: Línea 392:
  
 for key in a.keys(): for key in a.keys():
-    print(key)+    print(key,a[key])
 </sxh> </sxh>
  
 <sxh base> <sxh base>
-nombre +nombre Juan 
-edad+edad 37 
 +</sxh> 
 + 
 +  * Recorrer obteniendo clave y valor 
 +<sxh python> 
 +for key, value in a.items(): 
 +    print(key,value)
 </sxh> </sxh>
  
Línea 407: Línea 413:
 from tabulate import tabulate from tabulate import tabulate
  
-a=[  [5,0.7,0.765], [10,1.45,0.84], [20,2.678,0.978], [60,11.396,0.9973]  ]+datos=[  [5,0.7,0.765], [10,1.45,0.84], [20,2.678,0.978], [60,11.396,0.9973]  ]
  
  
-print(tabulate(a, headers=["Épocas", "Tiempo (s)", "Resultado"]))+print(tabulate(datos, headers=["Épocas", "Tiempo (s)", "Resultado"]))
 </sxh> </sxh>
  
Línea 422: Línea 428:
 </sxh> </sxh>
  
 +También podemos añadir una primera columna que sean también como "cabeceras". El siguiente anterior ejemplo se podría modificar de forma que en el array ''a'' solo estén los datos de tiempo y resultado y no las épocas ya que son como "cabeceras".
  
 +<sxh python>
 +from tabulate import tabulate
 +
 +datos=[  [0.7,0.765], [1.45,0.84], [2.678,0.978], [11.396,0.9973]  ]
 +epocas=[5,10,20,60]
 +
 +print(tabulate(datos, headers=["Épocas", "Tiempo (s)", "Resultado"],showindex=epocas))
 +
 +</sxh>
 +<sxh base>
 +  Épocas    Tiempo (s)    Resultado
 +--------  ------------  -----------
 +               0.7         0.765
 +      10         1.45        0.84
 +      20         2.678       0.978
 +      60        11.396       0.9973
 +</sxh>
  
 ===== Estructuras de control ===== ===== Estructuras de control =====
Línea 631: Línea 655:
 </sxh> </sxh>
 ===== Medición de rendimiento ===== ===== Medición de rendimiento =====
 +Para medir el tiempo que ha tardado algo se usa el método ''perf_counter''.
  
-=== timeit === +<sxh python> 
-IPython es como la forma genérica de los Jupyter Notebooks. Y tiene una serie de órdenes que podemos usar directamente. La orden ''%timeit'' permite saber el tiempo que ha tardado una orden en ejecutarse. +from time import monotonic
  
 +t = monotonic()
 +resultado=sum(range(10000000))
 +t=monotonic()-t
  
-<sxh python> +print(resultado
-time = %timeit -n1 -r1 -o sum(range(10000000)+print(round(t,2),"seg")
-</sxh> +
-Lo que hace es calcula el tiempo de ejecutar la orden ''sum(range(1000000000))'' y almacena cuanto ha tardado en ''time'' +
- +
-Y para imprimirlo, se usa: +
-<sxh python> +
-print(round(time.average,2),"seg")+
 </sxh> </sxh>
  
 <sxh base> <sxh base>
 +49999995000000
 0.21 seg 0.21 seg
 </sxh> </sxh>
  
-Sin embargo el problema de usar ''%timeit'' es que lo que ejecutas no puede devolver un resultado. Es decir que no podríamos saber el resultado de la suma.+El resultado se muestra en segundos
  
-=== perf_counter === +<note tip> 
-Para solucionar el problema anterior podemos simplemente medir nosotros el tiempo que tarda un método en ejecutarse con la función ''perf_counter''.+El problema de ''perf_counter()'' es que cuenta el tiempo en el que el ordenador está suspendido mientras que ''monotonic()'' no lo haceY tampoco cuenta el tiempo que el proceso está suspendido. 
 +</note>
  
-<sxh python> +Mas información: 
-from time import perf_counter+  * [[https://luminousmen.com/post/how-to-not-leap-in-time-using-python/|How to not leap in time using Python]] 
 +  * [[https://morton-kuo.medium.com/ml09-e549b2c26c47|ML09: Measuring Running Time in Python & R]]
  
-perf_counter() +===== Poetry ===== 
-resultado=sum(range(10000000)) +A veces no quieremos usar conda sino tener una carpeta con todo lo que necesita el proyecto, al estilo de //NodeJS//. En ese caso podemos usar una herramienta llamada [[https://python-poetry.org/|Poetry]] 
-t=perf_counter()-t+ 
 +  * Instalar poetry 
 +<sxh bash> 
 +pip install --user poetry
  
-print(resultado) 
-print(round(t,2),"seg") 
 </sxh> </sxh>
 +
 +
 +  * Comprobar que tenemos poetry instalado
 +
 +<sxh bash>
 +poetry --version
 +
 +</sxh>
 +
 +  * Para decir que las librerías se instalen en nuestra propia carpeta del proyecto.
 +<sxh bash>
 +poetry config virtualenvs.in-project true
 +
 +</sxh>
 +
 +  * Para tener un proyecto con python y todas sus dependencias en la misma carpeta haremos lo siguiente:
 +<sxh bash>
 +poetry init
 +poetry add libclang = "<12.0.0" numpy pandas matplotlib seaborn scikit-learn tensorflow tabulate PyMySQL SQLAlchemy ipympl keras-tuner tensorflow-addons statsmodels
 +poetry install
 +</sxh>
 +
 +<note important>
 +Si al hacer el ''poetry add'' se produce el error:
 +''[org.freedesktop.DBus.Error.UnknownObject] ("No such object path '/org/freedesktop/secrets/aliases/default'",)'' 
 +deberemos crear la siguiente variable de entorno:
 +''export PYTHON_KEYRING_BACKEND=keyring.backends.null.Keyring''
 +</note>
 +
 +Para ejecutar el código hay 2 formas:
 +
 +  * Desde la línea de comandos:
 +<sxh python>
 +poetry run python my_script.py
 +</sxh>
 +
 +  * Desde VS Code seleccionar en los entornos de ejecución la carpeta ''.venv'' del propio proyecto:
 +{{ :clase:iabd:pia:1eval:vs-code-poetry.png?direct |}}
 +
 +  * Si queremos usar el entorno de poetry pero no está en nuestra carpeta se puede indicar a VS Code cual es el ejecutable de python que debe usar siempre para ello hay que crear en la carpeta de nuestro proyecto el fichero ''$HOME/.config/Code/User/settings.json''
  
 <sxh base> <sxh base>
-49999995000000 +{     
-0.21 seg+    "python.defaultInterpreterPath": "/home/logongas/python_default_env/.venv/bin/python", 
 +}
 </sxh> </sxh>
  
-El resultado se muestra en segundos 
  
-Mas información: 
-  * [[https://morton-kuo.medium.com/ml09-e549b2c26c47|ML09: Measuring Running Time in Python & R]] 
  
 ===== Ejercicios ===== ===== Ejercicios =====
Línea 956: Línea 1020:
 |  64, 128, 64, 8, 1  |  20 | |  64, 128, 64, 8, 1  |  20 |
 |  64, 128, 64, 8, 1  |  40 | |  64, 128, 64, 8, 1  |  40 |
 +
 +==== Ejercicio 20 ====
 +Crea una clase llamada ''CuentaBancaria''.
 +
 +La clase debe tener  los siguientes atributos:
 +
 +  * ''titular'': el titular de la cuenta.
 +  * ''saldo'': el saldo actual de la cuenta.
 +  * 
 +La clase debe tener los siguientes métodos:
 +  * ''%%__%%init%%__%%'': el método de inicialización que toma el titular como parámetro e inicializa el saldo en 0.
 +  * ''depositar'': un método que toma una cantidad como parámetro y la suma al saldo actual.
 +  * ''retirar'': un método que toma una cantidad como parámetro y la resta del saldo actual, pero verifica que haya suficiente saldo antes de realizar la operación.
 +  * ''obtener_saldo'': un método que devuelve el saldo actual de la cuenta.
 +
 +Usa la clase de forma que
 +  * Se cree un objeto
 +  * Se depositen 100€
 +  * Se retiren 75€.
 +  * Imprimas el titular y el saldo.
  
  
clase/iabd/pia/1eval/tema02.1699096887.txt.gz · Última modificación: 2023/11/04 12:21 por admin