2017-09-25 80 views
2

我知道np.nanargmin找到列表中不是NaN的最小数字。然而,如果在数组[np.nan, np.inf]上调用它,则产生0,它是NaN。我觉得这种行为很奇怪,我只是想知道这样定义np.argmin的逻辑是什么。'np.nanargmin([np.nan,np.inf])= 0'后面的逻辑

+0

这*是*在[文档]提及(https://docs.scipy.org/doc/numpy-1.13.0/reference/ generated/numpy.nanargmin.html) - “警告:如果一个切片仅包含NaN和Infs,则结果不可信” - 尽管有记录,但仍然令人惊讶。 – user2357112

回答

1

如果你看一下文档np.nanargmin它说:

警告:如果片只包含NaN和INFS结果不能被信任。

如果您查看源代码,它有以下行:

a, mask = _replace_nan(a, np.inf) 

因此它与inf更换所有nan出现,所以那是找到分钟(还是有点怀疑),这将是argmin([inf, inf])

1

如果您在source看你看:

a, mask = _replace_nan(a, np.inf) 
res = np.argmin(a, axis=axis) 

这意味着它与np.inf更换np.nan。由于np.argmin为重复的值返回该值的第一个实例,np.argmin([np.inf, np.inf])返回0