我有一个超过330,000行的np.array。我只是尝试取其平均值并返回NaN。即使我试图过滤掉我的数组中任何潜在的NaN值(不管怎样都不应该),平均值会返回NaN。我做的事情很古怪吗?
我的代码在这里:
average(ngma_heat_daily)
Out[70]: nan
average(ngma_heat_daily[ngma_heat_daily != nan])
Out[71]: nan
答案 0 :(得分:5)
试试这个:
>>> np.nanmean(ngma_heat_daily)
此函数在取平均值之前从数组中删除NaN值。
修改:average(ngma_heat_daily[ngma_heat_daily != nan])
无效的原因是:
>>> np.nan == np.nan
False
根据IEEE浮点标准,NaN不等于它自己!你可以这样做来实现同样的想法:
>>> average(ngma_heat_daily[~np.isnan(ngma_heat_daily)])
np.isnan
,np.isinf
和类似函数对于此类数据屏蔽非常有用。
答案 1 :(得分:1)
此外,还有一个名为nanmedian的函数,它会忽略NaN值。该函数的签名为:numpy.nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=<no value>)