Python 如何使用nans计算地理平均值?
我想计算一些数据(包括NaN)的几何平均值,我该怎么做 我知道如何使用NaNs计算平均值,我们可以使用以下代码:Python 如何使用nans计算地理平均值?,python,nan,geometric-mean,Python,Nan,Geometric Mean,我想计算一些数据(包括NaN)的几何平均值,我该怎么做 我知道如何使用NaNs计算平均值,我们可以使用以下代码: import numpy as np M = np.nanmean(data, axis=2). 那么如何使用geomean呢?您可以使用标识(我只在中找到它,但可能还有其他来源): 该恒等式可使用几何平均数的正常定义上的“对数规则”构造: 基本a可以任意选择,因此您可以使用np.log(和np.exp作为反向操作): 这似乎是可行的: >>> l = [[1
import numpy as np
M = np.nanmean(data, axis=2).
那么如何使用geomean呢?您可以使用标识(我只在中找到它,但可能还有其他来源): 该恒等式可使用几何平均数的正常定义上的“对数规则”构造: 基本
a
可以任意选择,因此您可以使用np.log
(和np.exp
作为反向操作):
这似乎是可行的:
>>> 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.])
在NumPy 1.10中也添加了,因此您也可以使用法线定义:
import numpy as np
def nangmean(arr, axis=None):
arr = np.asarray(arr)
valids = np.sum(~np.isnan(arr), axis=axis)
prod = np.nanprod(arr, axis=axis)
return np.power(prod, 1. / valids)
或者使用更高效且稍长的版本,但将mean
替换为geomean
import numpy as np
def nangmean(arr, axis=None):
arr = np.asarray(arr)
valids = np.sum(~np.isnan(arr), axis=axis)
prod = np.nanprod(arr, axis=axis)
return np.power(prod, 1. / valids)