簡體   English   中英

Python:在python中做幾何平均值的簡單方法?

[英]Python : easy way to do geometric mean in python?

我想知道是否有任何簡單的方法可以使用 python 但不使用 python 包來計算幾何平均值。 如果沒有,是否有任何簡單的包來做幾何平均?

幾何平均值的公式為:

幾何平均數

因此,您可以輕松編寫如下算法:

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):
    return np.exp(np.log(iterable).mean())

如果有人在這里尋找庫實現,scipy 中有gmean() ,可能比自定義實現更快且在數值上更穩定:

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

與 Python 2 和 3 兼容。*

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))

您可以使用 pow 函數,如下所示:

def p(*args):
    k=1
    for i in args:
        k*=i
    return pow(k, 1/len(args))]

>>> p(2,3)
2.449489742783178

您還可以使用 numpy 計算幾何平均值:

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

結果:

1.8171205928321397
幾何平均數
import pandas as pd
geomean=Variable.product()**(1/len(Variable))
print(geomean)
Scipy 的幾何平均值
from scipy import stats
print(stats.gmean(Variable))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM