我偶然发现了一些关于
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
也有相同的行为。
我非常好奇这种行为的原因 - 有人有什么想法吗?
min
和max
,而且他的参数对于这个函数是有意义的。 - abarnertmath.nan
、decimal.Decimal('nan')
或任何遵循NaN定义语义的内容,都会得到相同的行为。 (好吧,Decimal
和numpy
允许您配置IEEE样式标志以进行NaN行为,并且默认情况下使用信号NaN,因此您可以使其从decimal
引发,例如InvalidOperation
。)您甚至可以创建一个完全不同的类型,其语义与NaN不同,除非它们定义了“安静”的部分排序并出现类似的怪异行为。 - abarnert