开发者

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

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 nans, check out masked arrays.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜