我想获取包含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

我将NaN替换为Infs,然后运行argmin
>>> a[isnan(a)] = Inf
>>> a
array([ Inf,  2.5,  3. ,  Inf,  4. ,  5. ])
>>> a.argmin()
1

我的难题是:我宁愿不将NaN更改为Infs,而是在用完argmin后再返回(因为NaN在代码中稍后有其含义)。有一个更好的方法吗?

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

最佳答案

当然!使用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, checkout masked arrays

09-15 23:03