是否有更好的方法使numpy.argmin()忽略NaN值

时间:2010-05-12 17:07:16

标签: arrays numpy python nan

我想得到包含NaN的numpy数组的最小值的索引,我希望它们被忽略

>>> a = array([ nan,   2.5,   3.,  nan,   4.,   5.])  
>>> a  
array([ NaN,  2.5,  3. ,  NaN,  4. ,  5. ])  

如果我运行argmin,它将返回第一个NaN的索引

>>> a.argmin()  
0  

我用Infs代替NaNs然后运行argmin

>>> a[isnan(a)] = Inf  
>>> a  
array([ Inf,  2.5,  3. ,  Inf,  4. ,  5. ])  
>>> a.argmin()  
1  

我的困境如下:我宁愿不将NaN更改为Infs,然后在完成argmin之后再回来(因为NaNs后来在代码中有意义)。有一个更好的方法吗?

还有一个问题是,如果 a 的所有原始值都是NaN,结果应该是什么?在我的实现中,答案是0

1 个答案:

答案 0 :(得分:31)

当然!使用nanargmin

import numpy as np
a = np.array([ np.nan,   2.5,   3.,  np.nan,   4.,   5.])
print(np.nanargmin(a))
# 1

还有nansumnanmaxnanargmaxnanmin

scipy.stats中,有nanmeannanmedian

For more ways要忽略nan,请查看masked arrays