Интересно, есть ли простой способ сделать геометрическое значение с помощью python, но без использования пакета python. Если этого не происходит, есть ли какой-либо простой пакет для геометрического среднего?
Python: простой способ сделать среднее геометрическое в python?
Ответ 1
Формула метрического среднего:
Итак, вы можете легко написать такой алгоритм, как:
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))
Ответ 2
В случае, если кто-то ищет здесь реализацию библиотеки, в scipy есть gmean(), возможно, более быстрый и численно более стабильный, чем пользовательская реализация:
>>> from scipy.stats.mstats import gmean
>>> gmean([1.0, 0.00001, 10000000000.])
46.415888336127786
Ответ 3
просто выполните это:
numbers = [1, 3, 5, 7, 10]
print reduce(lambda x, y: x*y, numbers)**(1.0/len(numbers))
Ответ 4
Начиная с Python 3.8
, стандартная библиотека поставляется с функцией geometric_mean
как частью модуля statistics
:
from statistics import geometric_mean
geometric_mean([1.0, 0.00001, 10000000000.]) // 46.415888336127786
Ответ 5
Здесь устойчивая к переполнению версия на чистом Python, в основном такая же, как принятый ответ.
import math
def geomean(xs):
return math.exp(math.fsum(math.log(x) for x in xs) / len(xs))