max(float('nan'), 1)
评估为 nan
max(1, float('nan'))
评估结果为 1
这是预期的行为吗?
感谢您的回答。
max
当可迭代对象为空时引发异常。为什么Python不可以max
引发异常时nan
存在?或者至少做一些有用的事情,比如返回nan
或忽略nan
。目前的行为是非常不安全的,而且看起来完全不合理。
我发现了这种行为的更令人惊讶的后果,所以我刚刚发布了一个相关问题 https://stackoverflow.com/questions/4240050/python-sort-function-breaks-in-the-presence-of-nan.
In [19]: 1>float('nan')
Out[19]: False
In [20]: float('nan')>1
Out[20]: False
浮标nan
既不大于也不小于整数1
.
max
首先选择第一个元素,并且仅在找到严格更大的元素时才替换它。
In [31]: max(1,float('nan'))
Out[31]: 1
Since nan
不大于1,则返回1。
In [32]: max(float('nan'),1)
Out[32]: nan
由于 1 不大于nan
, nan
被返回。
附言。注意np.max
treats float('nan')
不同的是:
In [36]: import numpy as np
In [91]: np.max([1,float('nan')])
Out[91]: nan
In [92]: np.max([float('nan'),1])
Out[92]: nan
但如果你想忽略np.nan
s,你可以使用np.nanmax
:
In [93]: np.nanmax([1,float('nan')])
Out[93]: 1.0
In [94]: np.nanmax([float('nan'),1])
Out[94]: 1.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)