Python: простой способ сделать геометрическое среднее в Python?
Интересно, есть ли какой-нибудь простой способ сделать среднее геометрическое с использованием python, но без использования пакета python. Если нет, то есть ли какой-нибудь простой пакет, чтобы сделать геометрическое среднее?
8 ответов
Формула среднего геометрического:
Таким образом, вы можете легко написать алгоритм, например:
import numpy as np
def geo_mean(iterable):
a = np.array(iterable)
return a.prod()**(1.0/len(a))
Вам не нужно использовать numpy для этого, но он имеет тенденцию выполнять операции над массивами быстрее, чем Python (так как при приведении происходит меньше "накладных расходов").
Если вероятность переполнения высока, вы можете сначала сопоставить числа с доменом журнала, вычислить сумму этих журналов, затем умножить на 1/n и, наконец, вычислить показатель степени, например:
import numpy as np
def geo_mean_overflow(iterable):
a = np.log(iterable)
return np.exp(a.sum()/len(a))
Начало Python 3.8
стандартная библиотека поставляется с geometric_mean
функционировать как часть statistics
модуль:
from statistics import geometric_mean
geometric_mean([1.0, 0.00001, 10000000000.]) // 46.415888336127786
Просто сделай это:
numbers = [1, 3, 5, 7, 10]
print reduce(lambda x, y: x*y, numbers)**(1.0/len(numbers))
Вот устойчивая к переполнению версия на чистом Python, в основном такая же, как принятый ответ.
import math
def geomean(xs):
return math.exp(math.fsum(math.log(x) for x in xs) / len(xs))
Вы также можете рассчитать среднее геометрическое с помощью numpy:
import numpy as np
np.exp(np.mean(np.log([1, 2, 3])))
результат:
1.8171205928321397
вы можете использовать функцию pow следующим образом:
def p(*args):
k=1
for i in args:
k*=i
return pow(k, 1/len(args))]
>>> p(2,3)
2.449489742783178
Среднее геометрическое
import pandas as pd
geomean=Variable.product()**(1/len(Variable))
print(geomean)
Среднее геометрическое с помощью Scipy
from scipy import stats
print(stats.gmean(Variable))