Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Average of a numpy array returns NaN

I have an np.array with over 330,000 rows. I simply try to take the average of it and it returns NaN. Even if I try to filter out any potential NaN values in my array (there shouldn't be any anyways), average returns NaN. Am I doing something totally wacky?

My code is here:

average(ngma_heat_daily)
Out[70]: nan

average(ngma_heat_daily[ngma_heat_daily != nan])
Out[71]: nan
like image 631
Asif Avatar asked Mar 25 '16 16:03

Asif


2 Answers

try this:

>>> np.nanmean(ngma_heat_daily)

This function drops NaN values from your array before taking the mean.

Edit: the reason that average(ngma_heat_daily[ngma_heat_daily != nan]) doesn't work is because of this:

>>> np.nan == np.nan
False

according to the IEEE floating-point standard, NaN is not equal to itself! You could do this instead to implement the same idea:

>>> average(ngma_heat_daily[~np.isnan(ngma_heat_daily)])

np.isnan, np.isinf, and similar functions are very useful for this type of data masking.

like image 172
jakevdp Avatar answered Oct 15 '22 06:10

jakevdp


Also, there is a function named nanmedian which ignores NaN values. Signature of that function is: numpy.nanmedian(a, axis=None, out=None, overwrite_input=False, keepdims=<no value>)

like image 29
Saswata Mishra Avatar answered Oct 15 '22 07:10

Saswata Mishra