首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算累积几何平均值

问计算累积几何平均值
EN

Stack Overflow用户
提问于 2017-05-01 09:33:34
回答 2查看 1.1K关注 0票数 1

尝试创建一个函数来求解向量或数组列的累积几何平均值。3.

我可以求解整个向量/列的几何平均值。只需执行以下操作:

代码语言:javascript
复制
from scipy import stats
GM=stats.gmean(X)
print(GM)

在求解累积算术平均值时,我可以简单地使用run pd.expanding_mean(x)来获得累积平均值。

有没有我可以运行的函数,它可以给我几何平均值相同的结果?

EN

回答 2

Stack Overflow用户

发布于 2017-05-01 09:56:34

如果你的系列很小,你可以在你已经使用的scipy.stats.gmean中使用expanding().apply:

代码语言:javascript
复制
In [26]: s = pd.Series(range(1,10))

In [27]: s.expanding().apply(stats.gmean)
Out[27]: 
0    1.000000
1    1.414214
2    1.817121
3    2.213364
4    2.605171
5    2.993795
6    3.380015
7    3.764351
8    4.147166
dtype: float64

但对于较长的系列,这将是非常低效的:

代码语言:javascript
复制
In [30]: %time egm = pd.concat([s]*1000).expanding().apply(stats.gmean)
CPU times: user 6.5 s, sys: 4 ms, total: 6.5 s
Wall time: 6.53 s

因此,您可能想要创建一个自定义函数,例如

代码语言:javascript
复制
def expanding_gmean_log(s):
    return np.exp(np.log(s).cumsum() / (np.arange(len(s))+1))

我们在日志空间中工作,而不是像s.cumprod() ** (1/(np.arange(len(s))+1))这样的东西,以帮助避免中间产品中的溢出。

代码语言:javascript
复制
In [52]: %timeit egm = expanding_gmean_log(pd.concat([s]*1000))
10 loops, best of 3: 71 ms per loop

In [53]: np.allclose(expanding_gmean_log(pd.concat([s]*1000)),
                     pd.concat([s]*1000).expanding().apply(stats.gmean))
Out[53]: True
票数 4
EN

Stack Overflow用户

发布于 2017-05-01 09:55:54

您可以使用gmean公式的矢量化实现。例如,

代码语言:javascript
复制
In [159]: x
Out[159]: array([10,  5, 12, 12,  2, 10])

In [160]: x.cumprod()**(1/np.arange(1., len(x)+1))
Out[160]: 
array([ 10.        ,   7.07106781,   8.43432665,   9.2115587 ,
         6.78691638,   7.23980855])

下面是使用gmean()和列表理解的相同结果:

代码语言:javascript
复制
In [161]: np.array([gmean(x[:k]) for k in range(1, len(x)+1)])
Out[161]: 
array([ 10.        ,   7.07106781,   8.43432665,   9.2115587 ,
         6.78691638,   7.23980855])

如果x.cumprod()可能会溢出,您可以使用gmean的对数;请参阅@DSM的答案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43713145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档