Is there a better way of making numpy.argmin() ignore NaN values

Posted by Dragan Chupacabrovic on Stack Overflow See other posts from Stack Overflow or by Dragan Chupacabrovic
Published on 2010-05-12T17:07:15Z Indexed on 2010/05/12 17:14 UTC
Read the original article Hit count: 290

Filed under:
|
|
|
|

Hello Everybody,

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

© Stack Overflow or respective owner

Related posts about python

Related posts about arrays