Pet*_*lan 3 python max nan min python-3.x
我不小心偶然发现了一些奇怪的行为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
Run Code Online (Sandbox Code Playgroud)
我玩了很多值,似乎给出的第一个值总是返回的值.可以观察到相同的行为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
Run Code Online (Sandbox Code Playgroud)
当您以数字开头时,比较失败,并且该数字成为结果.当您开始时nan,任何比较都会失败,结果将停留在该初始nan值.
它并不总是第一个值,只是你用上述机制得到的.例如:
>>> nan = numpy.nan
>>> max([7, nan, 15, nan, 5])
15
>>> max([nan, 7, nan, 15, nan, 5])
nan
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
75 次 |
| 最近记录: |