Python 如何使用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

我想计算一些数据(包括NaN)的几何平均值,我该怎么做

我知道如何使用NaNs计算平均值,我们可以使用以下代码:

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)