我无意中发现了 max
、min
和 numpy.nan
的一些奇怪行为,我很好奇下面发生了什么引擎盖。
考虑以下在 python3 中运行的代码:
import numpy as np
max(np.nan, 0) # outputs nan
max(np.nan, 10000) # outputs nan
max(0, np.nan) # outputs 0
max(10000, np.nan) # outputs 10000
我试过很多值,似乎第一个给出的值总是返回值。使用 min
可以观察到相同的行为。我本来希望输出始终为 nan
,甚至会引发错误,但这是非常出乎意料的。 Math.nan
做同样的事情。
我对这种行为很好奇——有人有什么想法吗?
最佳答案
编写您自己的 max
版本。请记住,NaN
将导致任何大于、等于或小于的比较返回 False
。例如,
def my_max(iter):
result = iter[0]
for val in iter[1:]:
if result < val:
result = val
return result
当您以数字开头时,比较失败,该数字成为结果。当您从 nan
开始时,任何 比较都会失败,并且结果停留在初始的 nan
值。
它并不总是第一个值,只是您通过上述机制获得的值。例如:
>>> nan = numpy.nan
>>> max([7, nan, 15, nan, 5])
15
>>> max([nan, 7, nan, 15, nan, 5])
nan
关于python - 为什么 `max` 和 `min` 与 numpy.nan 有如此奇怪的行为?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49640751/