开发者

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

开发者 https://www.devze.com 2022-12-29 21:51 出处:网络
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.])

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

精彩评论

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