python - 为什么 `max` 和 `min` 与 numpy.nan 有如此奇怪的行为?

标签 python python-3.x max nan min

我无意中发现了 maxminnumpy.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/

相关文章:

Python按两个列值的相反排序顺序按Groupby连接两个数据框

python - 为什么在 Python 3 的 'sys.modules' 中没有导入模块?

MySQL:在 WHERE 找到相似条目时选择最高列值

r - 在矩阵的每个元素上使用max

python - 使用 Python 检索 MySQL 数据

python - 调用 .save() 后 Django 模型不更新

python - 如何处理 f 字符串中的错误?

python - 无法解析来自 `th` 标记的数据以及来自不同表的 `td` 标记

python - 禁用 Tensorflow/Numpy 弃用警告消息

python-3.x - python : max value in a dictionary with 2 keys