我想计算一些数据的几何平均值(包括NaN),我该怎么做?
我知道如何用NaN计算平均值,我们可以使用以下代码:
import numpy as np
M = np.nanmean(data, axis=2).
那么如何使用geomean呢?
答案 0 :(得分:1)
您可以使用身份(我只在german Wikipedia中找到它,但也可能有其他来源):
可以使用"对数规则"来构建此身份。关于几何平均数的正常定义:
可以选择基本SymPy 1.0
,因此您可以使用a
(和np.log
作为反向操作):
np.exp
似乎有效:
import numpy as np
def nangmean(arr, axis=None):
arr = np.asarray(arr)
inverse_valids = 1. / np.sum(~np.isnan(arr), axis=axis) # could be a problem for all-nan-axis
rhs = inverse_valids * np.nansum(np.log(arr), axis=axis)
return np.exp(rhs)
在NumPy 1.10中还添加了np.nanprod
,因此您也可以使用正常定义:
>>> l = [[1, 2, 3], [1, np.nan, 3], [np.nan, 2, np.nan]]
>>> nangmean(l)
1.8171205928321397
>>> nangmean(l, axis=1)
array([ 1.81712059, 1.73205081, 2. ])
>>> nangmean(l, axis=0)
array([ 1., 2., 3.])