max(float('nan'), 1) 评估为nan
max(float('nan'), 1)
max(1, float('nan')) 评估为1
max(1, float('nan'))
这是预期的行为吗?
感谢您的回答。
max当iterable为空时引发异常。为什么Pythonmax出现时不引发异常nan?或者至少做一些有用的事情,例如returnnan或ignore nan。当前的行为非常不安全,似乎完全不合理。
max
nan
In [19]: 1>float(‘nan’) Out[19]: False
In [20]: float('nan')>1 Out[20]: False
浮点数nan不得大于或小于整数1。 max首先选择第一个元素,然后仅在找到严格更大的元素时才替换它。
1
In [31]: max(1,float('nan')) Out[31]: 1
由于nan不大于1,因此返回1。
In [32]: max(float('nan'),1) Out[32]: nan
由于1不大于nan,nan因此返回。
PS。请注意,np.max对待方式float('nan')有所不同:
np.max
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.nans,则可以使用np.nanmax:
np.nan
np.nanmax
In [93]: np.nanmax([1,float('nan')]) Out[93]: 1.0 In [94]: np.nanmax([float('nan'),1]) Out[94]: 1.0