Utilizando %mprun: Hero BMI 2.0
Veamos si utilizando un enfoque diferente para calcular los IMC podemos ahorrar algo de memoria. Si recuerdas, la altura y el peso de cada héroe se almacenan en un arreglo numpy
. Esto significa que puedes utilizar las prácticas funciones de indexación de arreglos y difusión de NumPy para realizar tus cálculos. Se ha creado una función llamada calc_bmi_arrays
y se ha guardado en un archivo llamado bmi_arrays.py
. Para mayor comodidad, se muestra a continuación:
def calc_bmi_arrays(sample_indices, hts, wts):
# Gather sample heights and weights as arrays
s_hts = hts[sample_indices]
s_wts = wts[sample_indices]
# Convert heights from cm to m and square with broadcasting
s_hts_m_sqr = (s_hts / 100) ** 2
# Calculate BMIs as an array using broadcasting
bmis = s_wts / s_hts_m_sqr
return bmis
Observa que esta función realiza todos los cálculos necesarios utilizando arreglos.
Veamos si este enfoque de arreglo actualizado disminuye tu huella de memoria:
- Carga el paquete
memory_profiler
en tu sesión IPython. - Importa
calc_bmi_arrays
desdebmi_arrays
. - Una vez que hayas completado los pasos anteriores, utiliza
%mprun
para perfilar la funcióncalc_bmi_arrays()
que actúa sobre los datos de tus superhéroes. Se han cargado en tu sesión los arreglossample_indices
,hts
ywts
.
Cuando hayas terminado de codificar, responde a la siguiente pregunta:
¿Cuánta memoria consumen las líneas de código de indexación y emisión de arreglos en la función calc_bmi_array()
? (es decir, ¿cuál es la suma total de la columna Increment
para estas cuatro líneas de código?)
Este ejercicio forma parte del curso
Escribir código Python eficiente
Ejercicio interactivo práctico
Pon en práctica la teoría con uno de nuestros ejercicios interactivos
