Python:在python中做几何平均的简单方法?

时间:2017-03-29 16:48:27

标签: python math statistics geometric-mean

我想知道有没有简单的方法来使用python进行几何平均但不使用python包。如果没有,是否有任何简单的包来做几何意义?

8 个答案:

答案 0 :(得分:31)

几何平均值的公式为:

geometrical mean

因此您可以轻松编写如下算法:

import numpy as np

def geo_mean(iterable):
    a = np.array(iterable)
    return a.prod()**(1.0/len(a))

你不必为此使用numpy,但它往往比Python更快地对数组执行操作(因为使用转换时“开销”较少)。

如果溢出的可能性很高,您可以先将数字映射到 log 域,计算这些日志的总和,然后乘以1 / n最后计算指数,如:

import numpy as np

def geo_mean_overflow(iterable):
    a = np.log(iterable)
    return np.exp(a.sum()/len(a))

答案 1 :(得分:10)

如果有人在这里寻找库实现,则scipy中有gmean(),可能比自定义实现更快并且在数值上更稳定:

>>> from scipy.stats.mstats import gmean
>>> gmean([1.0, 0.00001, 10000000000.])
46.415888336127786

答案 2 :(得分:3)

这样做:

numbers = [1, 3, 5, 7, 10]


print reduce(lambda x, y: x*y, numbers)**(1.0/len(numbers))

答案 3 :(得分:3)

Python 3.8开始,标准库随geometric_mean函数一起作为statistics模块的一部分:

from statistics import geometric_mean

geometric_mean([1.0, 0.00001, 10000000000.]) // 46.415888336127786

答案 4 :(得分:1)

您还可以使用numpy计算几何平均值:

import numpy as np
np.exp(np.mean(np.log([1, 2, 3])))

结果:

1.8171205928321397

答案 5 :(得分:0)

这是纯Python中的防溢出版本,基本上与the accepted answer相同。

import math

def geomean(xs):
    return math.exp(math.fsum(math.log(x) for x in xs) / len(xs))

答案 6 :(得分:0)

几何平均值

import pandas as pd
geomean=Variable.product()**(1/len(Variable))
print(geomean)

Scipy的几何平均值

from scipy import stats
print(stats.gmean(Variable))

答案 7 :(得分:0)

可以使用pow函数,如下:

onTap