I want to get the index of the min value of a numpy array that contains NaNs and I want them ignored
>>> a = array([ nan, 2.5, 3., nan, 4., 5.]) >>> a array([ NaN, 2.5, 3. , NaN, 4. , 5. ])
if I run argmin, it returns the index of the first NaN
>>> a.argmin() 0
I substitute NaNs with Infs and then run argmin
>>> a[isnan(a)] = Inf >>> a array([ Inf, 2.5, 3. , Inf, 4. , 5. ]) >>> a.argmin() 1
My dilemma is the following: I'd rather not change NaNs to Infs and then back after I'm done with argmin (since NaNs have a meaning later on in the code). Is there a better way to do this?
There is also a question of what should the result be if all of the original values of a are NaN? In my implementation the answer is 0
Sure! Use nanargmin
:
import numpy as np a = np.array([ np.nan, 2.5, 3., np.nan, 4., 5.]) print(np.nanargmin(a)) # 1
There is also nansum
, nanmax
, nanargmax
, and nanmin
,
In scipy.stats
, there is nanmean
and nanmedian
.
For more ways to ignore nan
s, check out masked arrays.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With