1
我想計算一些數據(包括NaN)的幾何平均數,我該怎麼做?如何用nans計算地球的平均值?
我知道如何計算與NaN的平均值,我們可以使用下面的代碼:
import numpy as np
M = np.nanmean(data, axis=2).
因此,如何用幾何平均值辦呢?
我想計算一些數據(包括NaN)的幾何平均數,我該怎麼做?如何用nans計算地球的平均值?
我知道如何計算與NaN的平均值,我們可以使用下面的代碼:
import numpy as np
M = np.nanmean(data, axis=2).
因此,如何用幾何平均值辦呢?
你可以使用的身份(我只發現它在german Wikipedia但也有可能是其他的來源):在正常
這個身份可以用「對數規則」來構建幾何平均數的定義:
基礎a
可以arbitarly選擇,所以你可以使用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)
它似乎工作:
>>> 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也加入np.nanprod
,所以你也可以使用普通的定義:
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)
https://stackoverflow.com/questions/19852586/get-mean-value-avoiding-nan-using-numpy-in-python or htt ps://stackoverflow.com/questions/5480694/numpy-calculate-averages-with-nans-removed更有效率和稍長的版本,但用'geomean'代替'mean' – Ryan