numpy数组的平均值返回NaN

21

我有一个包含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
2个回答

24

试试这个:

>>> 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.isnannp.isinf 和类似的函数对于这种类型的数据屏蔽非常有用。

np.isnannp.isinf及其类似函数在数据屏蔽方面非常实用。


1
成功了!你能解释一下仅仅取平均值的问题在哪吗?我有另外一个由相同原始来源产生的包含16k个条目的数组,使用average()方法完全没有问题。 - Asif

3

还有一个名为nanmedian的函数可以忽略NaN值。该函数的签名如下:numpy.nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=<no value>)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接