viernes, 13 de julio de 2018

Media ponderada

Reto: Media ponderada

Calcular la media ponderada de una serie de valores.




Vamos a calcular la media aritmética y la media ponderada de una serie de exámenes. Conocemos la nota de las prueba y su peso. Los pesos vienen dados en tanto por uno y han de sumar uno, que equivale al 100%. Hemos puesto unos datos para que diferencien bien ambas medias. La media aritmética saldrá 6,5 y la ponderara será de 8,37, ya que los pesos mayores recaen en los exámenes donde se ha obtenido mejor calificación.

Método 1

Disponemos de las notas (lista x) y de los pesos (lista w). La condición sum(w)==1 ha de arrojar el valor True, lo que permite comprobar que los pesos suman uno. Inicializamos la variable arit que calculará la media aritmética. Nos metemos en un blucle for que recorrerá todas las calificaciones de la lista x. En cada iteración ira acumulando las notas en la variable arit. Al finalizar el bucle dividimos el contenido de la variable arit entre el número de elementos de la lista x, de esta forma ya tendremos calculada la media aritmética y pasamos a imprimirla.
Inicializamos la variable pondera con el valor cero. Esta variable calculará la media ponderada. Nos metemos en un bucle for que recorrerá los números desde el cero hasta cinco, ya que la longitud de x es seis. En cada ciclo del bucle la variable pondera irá acumulando cada una de las calificaciones multiplicada por su peso en tanto por uno. Al finalizar el bucle la variable pondera ya contendrá la media aritmética ponderada que pasaremos a imprimir con un cierto redondeo.

#Notas de los exámenes
x=[7,4,9,3,6,10]
#Pesos de cada examen. Suman 1=100%
w=[.1,.05,.25,.06,.09,.45]
print('¿Los pesos suman 1?:',sum(w)==1.)
arit=0
for i in x:
  arit+=i
arit/=len(x)
print('Media aritmética:',arit)
pondera=0
for i in range(len(x)):
  pondera+=x[i]*w[i]
print('Media ponderada:',round(pondera,6))


Método 2

En este método utilizamos una notación condensada para los bucles for. Para la media aritmética el bucle for utiliza una única variable instrumental i, pero en el caso de la media ponderada son necesarias dos variable auxiliares i, j. También hemos tenido que emplear zip para unir las listas sobre las que operamos x y w.

x=[7,4,9,3,6,10] #Notas
w=[.1,.05,.25,.06,.09,.45] #Pesos
arit=round(sum(i for i in x)/len(x),6)
print('Media aritmética:',arit)
pondera=round(sum(i*j for i,j in zip(x,w)),6)
print('Media ponderada:',pondera)


Método 3

Importamos la librería científica NumPy que nos permite trabajar con vectores (arrays). Para calcular la media aritmética utilizamos mean que es una función disponible en la librería NumPy y que precisamente calcula la media aritmética de los valores que contiene la lista x.
Convertimos las listas x y w en los array xa y wa. La nota media ponderada se obtiene sin más que multiplicar ambos vectores y sumar su resultado.

import numpy as np
x=[7,4,9,3,6,10] #Notas
w=[.1,.05,.25,.06,.09,.45] #Pesos
arit=np.mean(x)
print('Media aritmética:',arit)
xa=np.array(x)
wa=np.array(w)
pondera=round(sum(xa*wa),6)
print('Media ponderada:',pondera)

No hay comentarios:

Publicar un comentario