Utilisez SciPy de Python pour trouver la moyenne harmonique. Installez d'abord SciPy.
Si toutes les cibles de calcul ne sont pas des valeurs supérieures à 0 (nombres réels positifs), une exception sera levée. Les nombres négatifs réduisent le dénominateur et aboutissent à de grandes moyennes harmonisées. Par exemple, si la moyenne harmonisée de 3, -3,4 est calculée selon la formule, elle sera de 12. De telles valeurs ne peuvent pas être utilisées.
harmonic_mean1.py
from scipy import stats
# 1, 2,Moyenne harmonique de 4 ⇒ 1.71428571429
print stats.hmean([1, 2, 4])
# 1, 0.5, 2.0,Moyenne harmonique de 10 ⇒ 1.11111111111
print stats.hmean([1, 0.5, 2.0, 10])
#Après cela, un exemple d'essai d'une valeur négative
# 3,-3,Moyenne harmonisée de 4 ⇒ Erreur de valeur: Harmonic mean only defined if all elements greater than zero
print stats.hmean([3, -3, 4])
#Lorsque calculé selon la formule de la moyenne harmonisée ⇒ 12 valeurs augmentées!?Non, c'est une valeur non valide.
print(3 / ((1 / 3.0) + (1 / -3.0) + (1 / 4.0)))
harmonic_mean2.py
from scipy import stats
HM_OFFSET = 0.0001
def custom_hmean(values_list):
u"""Wrapper avec exceptions à la fonction de moyenne harmonique."""
#Si toutes les valeurs calculées sont Aucune, définissez la moyenne harmonisée sur Aucune.
if values_list[0] is None and\
values_list == [values_list[0]] * len(values_list):
return None
#Si toutes les valeurs calculées sont égales ou inférieures à 0, la moyenne d'harmonie est définie sur 0.
if max(values_list) <= 0:
return 0
#Si la valeur à calculer est None, on considère qu'il n'y a pas de données, et si elle est égale ou inférieure à 0, HM_Défini sur la valeur de OFFSET
return stats.hmean(
[v if v > 0 else HM_OFFSET for v in values_list if v is not None])
print custom_hmean([3, 0, 4]) # 0.000299982501021
print custom_hmean([3, None, 4]) # 3.42857142857
print custom_hmean([0, -1, -2, -3]) # 0
print custom_hmean([0, -1, -2, 1]) # 0.000133328889037
print custom_hmean([0, 0, 1, 0]) # 0.000133328889037
print custom_hmean([None, None, 1, None]) # 1.0
print custom_hmean([None, None, None, None]) # None
print custom_hmean([0, 0, 0, 0]) # 0
Détails de scipy.stats.hmean anglais Reportez-vous à Wikipedia pour la formule de la moyenne d'harmonie ⇒ Harmony average Est l'inverse de la moyenne arithmétique de l'inverse
Recommended Posts