Python :在 python 中计算几何平均数的简单方法?
Python : easy way to do geometric mean in python?
我想知道是否有任何简单的方法可以使用 python 但不使用 python 包来计算几何平均数。如果没有,有没有做几何平均的简单包?
就这样做:
numbers = [1, 3, 5, 7, 10]
print reduce(lambda x, y: x*y, numbers)**(1.0/len(numbers))
几何平均数的公式为:
所以你可以很容易地写出这样的算法:
<b>import numpy as np</b>
def geo_mean(iterable):
a = <b>np.array(iterable)</b>
return a.<b>prod()</b>**(1.0/len(a))
您不必为此使用 numpy,但它往往比 Python 更快地对数组执行操作。参见 this answer for why。
万一溢出的几率高,可以先将数字映射到log域,计算这些数的和日志,然后乘以 1/n 最后计算指数,如:
import numpy as np
def geo_mean<b>_overflow</b>(iterable):
return np.exp(<b>np.log(iterable)</b>.<b>mean()</b>)
万一有人在这里寻找库实现,scipy 中有 gmean(),可能比自定义实现更快且数值更稳定:
>>> from scipy.stats import gmean
>>> gmean([1.0, 0.00001, 10000000000.])
46.415888336127786
兼容 Python 2 和 3。*
开始 Python 3.8
,标准库附带 geometric_mean
function as part of the statistics
模块:
from statistics import geometric_mean
geometric_mean([1.0, 0.00001, 10000000000.]) # 46.415888336127786
这里有一个 overflow-resistant 纯 Python 版本,与 基本相同。
import math
def geomean(xs):
return math.exp(math.fsum(math.log(x) for x in xs) / len(xs))
几何平均数
import pandas as pd
geomean=Variable.product()**(1/len(Variable))
print(geomean)
Scipy
的几何平均数
from scipy import stats
print(stats.gmean(Variable))
你也可以用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
我想知道是否有任何简单的方法可以使用 python 但不使用 python 包来计算几何平均数。如果没有,有没有做几何平均的简单包?
就这样做:
numbers = [1, 3, 5, 7, 10]
print reduce(lambda x, y: x*y, numbers)**(1.0/len(numbers))
几何平均数的公式为:
所以你可以很容易地写出这样的算法:
<b>import numpy as np</b>
def geo_mean(iterable):
a = <b>np.array(iterable)</b>
return a.<b>prod()</b>**(1.0/len(a))
您不必为此使用 numpy,但它往往比 Python 更快地对数组执行操作。参见 this answer for why。
万一溢出的几率高,可以先将数字映射到log域,计算这些数的和日志,然后乘以 1/n 最后计算指数,如:
import numpy as np
def geo_mean<b>_overflow</b>(iterable):
return np.exp(<b>np.log(iterable)</b>.<b>mean()</b>)
万一有人在这里寻找库实现,scipy 中有 gmean(),可能比自定义实现更快且数值更稳定:
>>> from scipy.stats import gmean
>>> gmean([1.0, 0.00001, 10000000000.])
46.415888336127786
兼容 Python 2 和 3。*
开始 Python 3.8
,标准库附带 geometric_mean
function as part of the statistics
模块:
from statistics import geometric_mean
geometric_mean([1.0, 0.00001, 10000000000.]) # 46.415888336127786
这里有一个 overflow-resistant 纯 Python 版本,与
import math
def geomean(xs):
return math.exp(math.fsum(math.log(x) for x in xs) / len(xs))
几何平均数
import pandas as pd
geomean=Variable.product()**(1/len(Variable))
print(geomean)
Scipy
的几何平均数from scipy import stats
print(stats.gmean(Variable))
你也可以用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