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

Dra*_*ric 16 python arrays numpy nan

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

>>> a = array([ nan,   2.5,   3.,  nan,   4.,   5.])  
>>> a  
array([ NaN,  2.5,  3. ,  NaN,  4. ,  5. ])  
Run Code Online (Sandbox Code Playgroud)

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

>>> a.argmin()  
0  
Run Code Online (Sandbox Code Playgroud)

我用Infs代替NaNs然后运行argmin

>>> a[isnan(a)] = Inf  
>>> a  
array([ Inf,  2.5,  3. ,  Inf,  4. ,  5. ])  
>>> a.argmin()  
1  
Run Code Online (Sandbox Code Playgroud)

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

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

unu*_*tbu 32

当然!用途nanargmin:

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

还有nansum,nanmax,nanargmax,和nanmin,

scipy.stats,有nanmeannanmedian.

有关忽略nans的更多方法,请查看屏蔽数组.

  • 你不知道这让我有多高兴。 (3认同)